0%

【MybatisPlus】逻辑删除&自动填充&IDEA插件

逻辑删除,自动填充,IDEA插件整合笔记


1 逻辑删除

1 介绍

  • 所谓逻辑删除,即不是真正在数据库中对数据进行删除,而是通过一个字段控制该数据的状态,来表示是否已删除
  • MybatisPlus的逻辑删除操作,实际是替换sql,将所有delete相关的sql,更改为update,来修改删除状态
  • 将所有的select后面都拼接一个where deleteflag = 未删除状态,来查询未删除的数据

2 逻辑删除开启

  • (1)修改数据库表,添加表示删除状态的字段
    1
    2
    alter table user
    add column delete_flag int default 0
  • (2)实体类添加相应属性
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Data
    public class User {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String name;
    private Integer age;
    private String email;

    @TableLogic //mybatis-plus3.3.0以上可以省略
    private int deleteFlag;
    }
  • (3)配置yaml开启逻辑删除
    1
    2
    3
    4
    5
    6
    mybatis-plus:
    global-config:
    db-config:
    logic-delete-field: deleteFlag #逻辑删除实体类属性名
    logic-delete-value: 1 #删除状态值
    logic-not-delete-value: 0 #未删除状态值
  • (4)测试
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    @SpringBootTest
    public class SpringMPTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void logicDeleteTest() {
    //删除测试
    userMapper.deleteById(1);

    //查询测试
    userMapper.selectList(null);
    }
    }

2 自动填充

2.1 介绍

  • 有时候,我们希望我们的sql的某些字段不用传参,也能自动补充参数,执行插入或更新操作
  • 而MybatisPlus提供了自动填充功能,为了我们定义的字段,自动补充参数
  • 我们也可以在创建表字段的时候设置默认值来达到此效果

2.2 使用

  • (1)新增数据库表字段
    1
    2
    3
    4
    5
    6
    7
    # 添加时间字段
    alter table user
    add column create_time datetime


    alter table user
    add column update_time datetime
  • (2)实体新增相应属性
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @Data
    public class User {
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String name;
    private Integer age;
    private String email;

    @TableLogic
    private int deleteFlag;

    //添加fill属性,有DEFAULT(不处理),INSERT(新增时填充),UPDATE(更新时填充),INSERT_UPDATE(新增和更新时填充)
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(value = "update_time", fill = FieldFill.UPDATE)
    private Date updateTime;
    }
  • (3)创建自动填充处理器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    @Component
    public class AutoFillHandler implements MetaObjectHandler {

    //插入填充
    @Override
    public void insertFill(MetaObject metaObject) {
    //三种方法都可以,选择其中一种
    //方法一:[metaObject, 实体类属性名, Java类型,填充数值]
    this.strictInsertFill(metaObject, "createTime", Date.class, new Date());

    //方式二:[metaObject,实体类属性名, 函数:带返回值(可用lamda),Java类型]
    this.strictInsertFill(metaObject, "createTime", () -> {return new Date();}, Date.class);

    //方法三:[metaObject, 实体类属性名,填充数值]
    this.fillStrategy(metaObject, "createTime", new Date());
    }

    //更新填充
    @Override
    public void updateFill(MetaObject metaObject) {
    //update与insert同理
    this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
    }
    }
  • (4)测试
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    @Test
    public void autoFillTest() {
    //新增测试
    User user = new User();
    user.setName("asaki");
    user.setAge(18);
    user.setEmail("asaki@qq.com");
    userMapper.insert(user);


    //更新测试
    User user1 = new User();
    user1.setName("C酱");
    user1.setId(1);
    userMapper.updateById(user1);
    }

3 IDEA插件

3.1 介绍

  • MybatisPlus为IDEA专门提供一个便利的插件MybatisX
  • 通过MyabtisX,我们可以通过Mapper接口,直接跳转到对应的SQL的xml文件中,十分方便

3.2 插件安装

  • File –> Settings –> Plugins ,搜索MybatisX,安装后重启IDEA

3.3 插件效果