使用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条件会忽略该字段,原因和上面的原因是一样的。
上一篇:
IDEA上Java项目控制台中文乱码