Mybatis-Plus逻辑删除

  • Mybatis+Mybatis-Plus
  • Spring+Mybatis+Mybatis-Plus
  • Spring Boot+Mybatis+Mybatis-Plus
  • Mybatis-Plus通用CRUD
  • Mybatis-Plus配置
  • Mybatis-Plus条件构造器
  • Mybatis-Plus ActiveRecord模式CRUD
  • Mybatis-Plus Oracle 主键Sequence
  • Mybatis-Plus插件
  • Mybatis-Plus Sql 注入器
  • Mybatis-Plus自动填充功能

开发系统时,有时候在实现功能时,删除操作需要实现逻辑删除,所谓逻辑删除就是将数据标记为删除,而并非真正的物理删除(非DELETE操作),查询时需要携带状态条件,确保被标记的数据不被查询到。这样做的目的就是避免数据被真正的删除。

修改表结构

为tb_user表增加deleted字段,用于表示数据是否被删除,1代表删除,0代表未删除

ALTER TABLE `tb_user` ADD COLUMN `deleted` INT ( 1 ) NULL DEFAULT 0 COMMENT '1代表删除,0代表未删除' AFTER `version`;

同时,也修改User实体,增加deleted属性并且添加@TableLogic注解

@TableLogic // 逻辑删除字段 ,1-删除,0-未删除
private Integer deleted;

配置

application.properties

# 逻辑已删除值(默认为 1)
mybatis-plus.global-config.db-config.logic-delete-value=1
# 逻辑未删除值(默认为 0)
mybatis-plus.global-config.db-config.logic-not-delete-value=0

测试

@Test
public void testDelete() {
	User user = new User();
	user.setId(11L);

	boolean result = user.deleteById();
	System.out.println("result => " + result);
}

执行的SQL

 Time:0 ms - ID:cn.com.javakf.mapper.UserMapper.deleteById
Execute SQL:
    UPDATE
        tb_user 
    SET
        deleted=1 
    WHERE
        id=11 
        AND deleted=0

Mybatis-Plus逻辑删除_第1张图片
测试查询

@Test
public void testSelectById() {
	User user = new User();
	user.setId(11L);

	User user1 = user.selectById();
	System.out.println(user1);
}

执行的SQL

[main] [cn.com.javakf.mapper.UserMapper.selectById]-[DEBUG] ==>  Preparing: SELECT id,user_name,name,age,email AS mail,version,deleted FROM tb_user WHERE id=? AND deleted=0 
[main] [cn.com.javakf.mapper.UserMapper.selectById]-[DEBUG] ==> Parameters: 11(Long)
[main] [cn.com.javakf.mapper.UserMapper.selectById]-[DEBUG] <==      Total: 0
 Time:17 ms - ID:cn.com.javakf.mapper.UserMapper.selectById
Execute SQL:
    SELECT
        id,
        user_name,
        name,
        age,
        email AS mail,
        version,
        deleted 
    FROM
        tb_user 
    WHERE
        id=11 
        AND deleted=0

[main] [org.mybatis.spring.SqlSessionUtils]-[DEBUG] Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@64f1fd08]
null

可见,已经实现了逻辑删除。

你可能感兴趣的:(Mybatis-Plus)