MyBatisPlus-多记录操作及逻辑删除

简介: MyBatisPlus-多记录操作及逻辑删除

一、多记录操作

566b361dcecf400fbe90af178fcd4ae7.jpg

我们之前添加了很多商品在购物车上,如果不想要了,就要删除,一个一个删除比较慢还比较费事,所以会给用户一个批量操作,也就是一个复选框,用户一次可以勾选多个也可以进行全选,然后删除一次就可以将购物车清空,这就需要用到批量删除的操作。


实现多条删除,对应的API方法:

int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

删除(根据ID批量删除),参数是一个集合,可以存放多个id值。


需求:根据传入的id集合将数据库表中的数据删除掉

@SpringBootTest 
class Mybatisplus03DqlApplicationTests { 
    @Autowired 
    private UserDao userDao;
    @Test 
    void testDelete(){ 
        //删除指定多条数据 
        List<Long> list = new ArrayList<>(); 
        list.add(1402551342481838081L); 
        list.add(1402553134049501186L); 
        list.add(1402553619611430913L); 
        userDao.deleteBatchIds(list); 
    } 
}

执行成功后,数据库表中的数据就会按照指定的id进行删除。


除了按照id集合进行批量删除,也可以按照id集合进行批量查询,对应API是:

List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

查询(根据ID 批量删除),参数是一个集合,可以存放多个id的值。


需求:根据传入的ID集合查询用户信息

@SpringBootTest 
class Mybatisplus03DqlApplicationTests { 
    @Autowired 
    private UserDao userDao; 
    @Test 
    void testGetByIds(){ 
        //查询指定多条数据 
        List<Long> list = new ArrayList<>(); 
        list.add(1L); 
        list.add(3L); 
        list.add(4L); 
        userDao.selectBatchIds(list); 
    } 
}

查询结果会按照指定传入的id的值进行查询。

二、逻辑删除

在删除表中数据时,有时会有主外键的关系,如果删除了一条数据,对应其他表的有主外键关系对应的数据也会删除


对应删除操作业务问题:


物理删除:业务数据在数据库中丢失,执行的是delete操作

逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中,执行的update操作


1、修改数据表添加deleted列


字段名可以任意,内容可以自定义,比如0表示正常,1表示删除,可以在添加列的同时设置其默认值为0正常


2、实体类添加属性

@Data 
//@TableName("tbl_user") 可以不写是因为配置了全局配置 
public class User {
    @TableId(type = IdType.ASSIGN_UUID) 
    private String id; 
    private String name; 
    @TableField(value="pwd",select=false) 
    private String password; 
    private Integer age; 
    private String tel; 
    @TableField(exist=false) 
    private Integer online; 
    @TableLogic(value="0",delval="1") 
    //value为正常数据的值,delval为删除数据的值 
    private Integer deleted; 
}

3、运行删除方法

@SpringBootTest 
class Mybatisplus03DqlApplicationTests { 
    @Autowired 
    private UserDao userDao; 
    @Test 
    void testDelete(){ 
        userDao.deleteById(1L); 
    } 
}

逻辑删除走的是update操作,会将指定的字段修改成删除状态对应的值。


说明:


1、逻辑删除MP会将所有的查询都添加一个为删除的条件,也就是已经别删除的数据是不应该被查询出来的。如果还想把已经删除的数据都查询出来,就需要如下操作:

@Mapper 
public interface UserDao extends BaseMapper<User> {
    //查询所有数据包含已经被删除的数据 
    @Select("select * from tbl_user") 
    public List<User> selectAll(); 
}

2、如果每个表都有逻辑删除,不需要再每个模型类的属性上添加@TableLogic注解,可以在配置文件中添加全局配置,如下:

mybatis-plus: 
    global-config: 
        db-config: 
            # 逻辑删除字段名 
            logic-delete-field: deleted 
            # 逻辑删除字面值:未删除为0 
            logic-not-delete-value: 0 
            # 逻辑删除字面值:删除为1 
            logic-delete-value: 1

逻辑删除的本质是:修改操作,如果加了逻辑删除字段,查询数据时也会自动带上逻辑删除字段。


执行的SQL语句为:

UPDATE tbl_user SET deleted=1 where id = ? AND deleted=0
名称 @TableLogic
类型 属性注解
位置 模型类中用于表示删除字段的属性定义上方
作用 标识该字段为进行逻辑删除的字段
相关属性

value:逻辑未删除值

delval:逻辑删除值


目录
相关文章
|
6月前
|
计算机视觉
关于MybatisPlus的一个逻辑删除的基本常识
昨日写的删除订单的接口, 发现一个问题差点打碎我的三观...
109 0
|
5月前
|
数据库
MybatisPlus逻辑删除
MybatisPlus逻辑删除
|
6月前
|
SQL 数据库
MyBatisPlus之逻辑删除、MyBatisPlus解决并发问题的乐观锁机制
MyBatisPlus之逻辑删除、MyBatisPlus解决并发问题的乐观锁机制
83 2
|
6月前
|
SQL 存储 算法
Mybatis-Plus- CRUD接口-主键策略-自动填充和乐观锁-分页-逻辑删除-条件构造器和常用接口
Mybatis-Plus- CRUD接口-主键策略-自动填充和乐观锁-分页-逻辑删除-条件构造器和常用接口
|
SQL
Mybatis-plus 自定义SQL注入器查询@TableLogic 逻辑删除后的数据
Mybatis-plus使用@TableLogic注解进行逻辑删除数据后,在某些场景下,又需要查询该数据时,又不想写SQL。 自定义Mybatis-plus的SQL注入器一劳永逸的解决该问题
583 0
|
6月前
|
测试技术 数据库
深入解析MyBatis-Plus中的逻辑删除功能及实例
深入解析MyBatis-Plus中的逻辑删除功能及实例
949 0
|
6月前
|
前端开发 Java 数据库连接
Mybatis-Plus 逻辑删除
Mybatis-Plus 逻辑删除
|
SQL
mybatis-plus逻辑删除简单实现
mybatis-plus逻辑删除简单实现
68 0
|
SQL 数据库
mybatisPlus之逻辑删除解读
mybatisPlus之逻辑删除解读
CTO:半小时内处理好MyBatisPlus逻辑删除与唯一索引的兼容问题
需求背景 比如有张用户表,在插入或者更新数据的时候,我们需要 用户名称(username),不能重复。 我们首先考虑的是给该字段创建唯一索引