一、Mybatis-Plus 多记录操作
按照主键删除多条记录
List<Long> ids= Arrays.asList(new Long[]{2,3})
userDao.deleteBatchIds(ids);
示例代码如下:
@Test
void testDelete(){
//删除指定多条数据
List<Long> list = new ArrayList<>();
list.add(1402551342481838081L);
list.add(1402553134049501186L);
list.add(1402553619611430913L);
userDao.deleteBatchIds(list);
}
根据主键查询多条记录
List<Long> ids= Arrays.asList(new Long[]{2,3});
List<User> userList = userDao.selectBatchIds(ids);
示例代码如下:
@Test
void testDelete(){
//查询指定多条数据
List<Long> list = new ArrayList<>();
list.add(1L);
list.add(3L);
list.add(4L);
userDao.selectBatchIds(list);
}
二、Mybatis-Plus 逻辑删除
如下图,描述的是房屋中介公司销售业绩数据,右边表是人员信息,左边表是开单信息,
员工1张业绩离职了,数据不需要留了,执行了delete操作,执行完,左边表的关联数据成为垃圾数据,年底如果统计报表,如下图,已经删除了,或者是脏数据,无法读取。问题出现了,统计数据不对,日常删除操作对业务会有伤害性,会将数据从数据库中删除。
如何解决? 我们不应该删除数据,在数据后面加个字段,如果是1就代表删除了。
删除操作业务问题:业务数据从数据库中丢弃。
逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中。
逻辑删除操作步骤:
步骤一、数据库表中添加逻辑删除标记字段
数据库添加字段名 deleted 类型 int 长度 1
步骤二、实体类中添加对应字段,并设定当前字段为逻辑删除标记字段
步骤三、配置逻辑删除字面值
@Data
public class User {
private Long id;
//逻辑删除字段,标记当前记录是否被删除
@TableLogic(value = "0" ,delval = "1")
private Integer deleted;
}
配置逻辑删除字面值全局配置:
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted
logic-not-delete-value: 0
logic-delete-value: 1
逻辑删除开启后,执行的删除语句变成了更新语句,操作完以后会用deleted字段值标记数据是否被删除,并且标记被删除的数据,是不参与到Mabatis-Plus的API查询的过程中的,如果想查这些数据通过自己编写SQL语句。