MybatisPlus(二):自定义IService实现update,insert,delete等操作自动填充

11 篇文章 0 订阅
4 篇文章 0 订阅

前言

我们会发现CRUD操作中,我们有大量的公共字段需要去更新,例如createTime、createUser等这些字段,在上一篇文章介绍中MybatisPlus(一):注解实现update,insert,delete操作自动填充createTime等字段(有需要的可以参考下),我们通过官方提供的方式来实现了CRUD的时候一些公共值的自动填充,这样会有一个麻烦之处就是每次创建实例的时候我们都需要加上相应的注解,略有繁琐。这里我们通过自定义一个IService来继承MybatisPlus的基类来实现CRUD的时候值填充。

一、IService

我们通过观察IService会发现里面提供了大量的CRUD等操作来方便我们的一些基本开发操作,这里以Save操作为例,有兴趣的可以自行去研究源码。

public interface IService<T> {

    /**
     * 默认批次提交数量
     */
    int DEFAULT_BATCH_SIZE = 1000;

    /**
     * 插入一条记录(选择字段,策略插入)
     *
     * @param entity 实体对象
     */
    default boolean save(T entity) {
        return SqlHelper.retBool(getBaseMapper().insert(entity));
    }

........................................
二、自定义BaseService

自定BaseService继承IService接口,在这里需要注意:我们需要让泛型 继承 Object类(这里代指需要更新公共字段类)用来约束泛型一定是Object或者Object的子类。在重写的方法中进行公共字段的填充。如下:

public  interface BaseService<T extends BaseEntity> extends IService<T> {

    @Override
    default boolean save(T entity) {
        entity.setCreateUser("测试");
        entity.setCreateTime(new Date());
        return IService.super.save(entity);
    }
}
三、创建BaseEntity

这里只有两个字段用作记录,可根据需求自行定义。

@Data
public class BaseEntity{

    private Date createTime;

    private String createUser;
}
四、实体类继承BasseEntity
public class Test extends BaseEntity{

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    private String username;

    private Integer age;

}

到此处完成,我们来进行测试一下

Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2022bd2f] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@786777947 wrapping com.mysql.cj.jdbc.ConnectionImpl@374a9d71] will not be managed by Spring
==>  Preparing: INSERT INTO csdn_test ( username, age, create_time, create_user ) VALUES ( ?, ?, ?, ? )
==> Parameters: 张san(String), 18(Integer), 2021-04-09 17:13:06.645(Timestamp), 测试(String)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2022bd2f]

我们再来看一下数据库信息
在这里插入图片描述

到这里,基本实现已经完成,如果您发现有更好的方式或错误还恳请指正,再次感谢!

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈橙橙丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值