Mybatis-Plus删除操作以及实现逻辑删除

简介: Mybatis-Plus删除操作以及实现逻辑删除

1.png

mp实现逻辑删除功能.png


1、根据id删除记录



@Test
public void testDeleteById(){
    int result = userMapper.deleteById(8L);
    System.out.println(result);
}


2、批量删除


@Test
    public void testDeleteBatchIds() {
        int result = userMapper.deleteBatchIds(Arrays.asList(8, 9, 10));
        System.out.println(result);
    }


3、简单的条件查询删除



@Test
public void testDeleteByMap() {
    HashMap<String, Object> map = new HashMap<>();
    map.put("name", "Helen");
    map.put("age", 18);
    int result = userMapper.deleteByMap(map);
    System.out.println(result);
}


4、逻辑删除



物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据


逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录


(1)数据库中添加 deleted字段


ALTER TABLE `user` ADD COLUMN `deleted` boolean


image.png


image.png


(2)实体类添加deleted 字段


并加上 @TableLogic 注解 和 @TableField(fill = FieldFill.INSERT) 注解


@TableLogic
@TableField(fill = FieldFill.INSERT)
private Integer deleted;


(3)元对象处理器接口添加deleted的insert默认值


@Override
public void insertFill(MetaObject metaObject) {
    ......
    this.setFieldValByName("deleted", 0, metaObject);
}


(4)application.properties 加入配置


此为默认值,如果你的默认值和mp默认的一样,该配置可无


mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0


(5)在 MybatisPlusConfig 中注册 Bean


@Bean
public ISqlInjector sqlInjector() {
    return new LogicSqlInjector();
}


(6)测试逻辑删除


测试后发现,数据并没有被删除,deleted字段的值由0变成了1


测试后分析打印的sql语句,是一条update


注意:被删除数据的deleted 字段的值必须是 0,才能被选取出来执行逻辑删除的操作


/**
 * 测试 逻辑删除
 */
@Test
public void testLogicDelete() {
    int result = userMapper.deleteById(1L);
    System.out.println(result);
}


(7)测试逻辑删除后的查询


MyBatis Plus中查询操作也会自动添加逻辑删除字段的判断


/**
 * 测试 逻辑删除后的查询:
 * 不包括被逻辑删除的记录
 */
@Test
public void testLogicDeleteSelect() {
    User user = new User();
    List<User> users = userMapper.selectList(null);
    users.forEach(System.out::println);
}


测试后分析打印的sql语句,包含 WHERE deleted=0


SELECT id,name,age,email,create_time,update_time,deleted FROM user WHERE deleted=0




相关文章
|
8月前
|
SQL 存储 算法
Mybatis-Plus- CRUD接口-主键策略-自动填充和乐观锁-分页-逻辑删除-条件构造器和常用接口
Mybatis-Plus- CRUD接口-主键策略-自动填充和乐观锁-分页-逻辑删除-条件构造器和常用接口
|
SQL
Mybatis-plus 自定义SQL注入器查询@TableLogic 逻辑删除后的数据
Mybatis-plus使用@TableLogic注解进行逻辑删除数据后,在某些场景下,又需要查询该数据时,又不想写SQL。 自定义Mybatis-plus的SQL注入器一劳永逸的解决该问题
680 0
|
8月前
|
测试技术 数据库
深入解析MyBatis-Plus中的逻辑删除功能及实例
深入解析MyBatis-Plus中的逻辑删除功能及实例
1059 0
|
8月前
|
前端开发 Java 数据库连接
Mybatis-Plus 逻辑删除
Mybatis-Plus 逻辑删除
|
SQL
mybatis-plus逻辑删除简单实现
mybatis-plus逻辑删除简单实现
87 0
|
Java 数据库连接 数据库
深入了解Java中的MyBatis Plus注解 @TableLogic:优雅实现逻辑删除功能
在数据库操作中,逻辑删除是一种常见的需求,它能够将数据标记为已删除状态而不是直接从数据库中删除。MyBatis Plus作为一款强大的ORM框架,提供了注解 `@TableLogic`,使得开发者可以轻松实现逻辑删除功能,而不必手动编写复杂的SQL语句。本文将详细介绍 `@TableLogic` 注解的用法及其在持久层开发中的应用。
2741 1
Mybatis-plus实现逻辑删除
Mybatis-plus实现逻辑删除
201 0
|
SQL Java 数据库连接
MyBatis动态数据源配置(动态配置字段,库 适合简单逻辑)
MyBatis动态数据源配置(动态配置字段,库 适合简单逻辑)
160 0
|
SQL XML IDE
Fluent Mybatis 牛逼!做到代码逻辑和sql逻辑的合一
Fluent Mybatis 牛逼!做到代码逻辑和sql逻辑的合一
328 0
Fluent Mybatis 牛逼!做到代码逻辑和sql逻辑的合一
|
SQL 前端开发
【mybatis-plus】分页、逻辑删除
【mybatis-plus】分页、逻辑删除
【mybatis-plus】分页、逻辑删除