其他分享
首页 > 其他分享> > 使用MyBatis-Plus实现逻辑删除

使用MyBatis-Plus实现逻辑删除

作者:互联网

使用MyBatis-Plus实现逻辑删除
这边,我们使用MyBatis-Plus的逻辑删除功能来实现下上面介绍的方案一。
MyBatis-Plus(简称MP)是对MyBatis的增强,可以完全兼容MyBatis的原生功能,而且几乎可以省略单表操作的所有增删改查方法,大大提升了开发效率。
下面就来介绍下,MP的逻辑删除功能。
step1:进行配置

mybatis-plus:## 
  global-config:
    db-config:
      # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
      # logic-delete-field: flag  
      # 逻辑已删除值(默认为 1)
      logic-delete-value: 1 
      # 逻辑未删除值(默认为 0)
      logic-not-delete-value: 0 

step2: 添加注解

@TableLogic()
@TableField(select = false)
private Integer deleted;

step3: 使用

@Test
public void apiTest(){
    // UPDATE test.user SET deleted=1 WHERE user_id=? AND deleted=0
    logger.info("开始逻辑删除");
    int count = userDAO.deleteById(356);
    // SELECT * FROM test.user WHERE user_id=? AND deleted=0
    logger.info("开始查询");
    User user = userDAO.selectById(357);
    // UPDATE test.user SET user_name=?, telephone_no=?, id_card_no=?, identity_type=?, sex=?, birth_date=?, marital_status=?, asset_code=?, asset_branch_code=?, issuing_authority=?, job_type=?, address=?, work_unit=?, create_time=? WHERE user_id=? AND deleted=0
    logger.info("开始更新");
    userDAO.updateById(user);
}

MP的逻辑删除功能使用起来非常简单。但是需要我们注意以下几点:

开启逻辑删除功能后,MP在删除、查询和更新时会自动加上条件deleted=0,也就是只对没有删除的数据进行操作;
虽然MP对开启逻辑删除的表的插入操作没什么限制,但是还是建议在建表时,对deleted字段做默认限制,默认为0(未删除),插入数据时这个值可以不用设置;
对于自己在xml文件中定义的接口方法,MP是不会自动对其开启逻辑删除功能的,需要我们自己维护逻辑删除功能;
查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段;

下面是使用 QueryWrapper 进行查询时的sql,我们发现前面的deleted=0条件会让后面我们自己加的deleted条件失效

SELECT * FROM test.user WHERE deleted=0 AND (user_id = ? AND deleted = ? AND user_name = ?)

追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段,原因和上面的原因是一样的。

标签:逻辑,删除,deleted,Plus,user,MyBatis,MP
来源: https://blog.csdn.net/weixin_54949000/article/details/123631597