看狂神视频然后总结笔记,为以后自己复习用,如有错误,可在评论中指出,一起成长。
一、删除操作
// 测试删除
@Test
public void testDeleteById(){
userMapper.deleteById(15645165121L);
}
// 通过id批量删除
@Test
public void testDeleteBatchId(){
userMapper.deleteBatchIds(Arrays.asList(1123434654363544961L,1234325346544962L));
}
// 通过map删除
@Test
public void testDeleteMap(){
HashMap<String, Object> map = new HashMap<>();
map.put("name","laodidi");
userMapper.deleteByMap(map);
}
二、逻辑删除
物理删除 :从数据库中直接移除
逻辑删除 :再数据库中没有被移除,而是通过一个变量来让他失效! deleted = 0 => deleted = 1
1 在数据表中添加一个字段deleted
2 实体类中增加属性,添加注解@TableLogic
@TableLogic //逻辑删除
private Integer deleted;
3 配置
@Configuration
@EnableTransactionManagement
@MapperScan("com.lzy.mapper")//扫描mapper包,很重要
public class MybatisPlusConfig {
// 逻辑删除组件
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
}
application.yml
mybatis-plus:
global-config:
db-config:
logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
三、说明
只对自动注入的sql起效:
- 插入: 不作限制
- 查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
- 更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
- 删除: 实则为 更新
字段类型支持说明:
支持所有数据类型(推荐使用 Integer,Boolean,LocalDateTime)
如果数据库字段使用datetime,逻辑未删除值和已删除值支持配置为字符串null,另一个值支持配置为函数来获取值如now()