04-MP物理删除&逻辑删除&条件构造器以及常用接口
Posted 型男一枚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了04-MP物理删除&逻辑删除&条件构造器以及常用接口相关的知识,希望对你有一定的参考价值。
一、物理删除
在Mp中,没有指定(配置)逻辑删除时,我们所做的删除都是物理删除。
1、根据Id删除
@Test
public void testDeleteById(){
int result = userMapper.deleteById(5L);
system.out.println(result);
}
2、批量删除
@Test
public void testDeleteBatchIds() {
int result = userMapper.deleteBatchIds(Arrays.asList(8, 9, 10));
system.out.println(result);
}
3、简单的条件删除
使用map构造删除的条件,只能构造等于的关系条件,一般不使用这个,使用wrapper进行
@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);
}
二、逻辑删除
逻辑删除就是修改删除的标识符,mp默认0为未删除,1为已删除。
物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据
逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
逻辑删除的使用场景: 可以进行数据恢复 有关联数据,不便删除
1、实现流程
- 首先在数据库表中建立一个表示符字段来表示是否已经逻辑删除。
- 其次要在实体类的标识删除的字段上加上一个注解@TableLogic来修饰,用来标识此属性子段为逻辑删除标识符。
- 配置(可选),application.properties 加入以下配置,此为默认值,如果你的默认值和mp默认的一样,该配置可无
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
配置逻辑删除后,整个项目的这个表都会自动配置逻辑删除,此外,对此表查询,更新操作时,会自动加上未删除的条件。
三、条件构造器和常用接口
1、wrapper
wrappe接口实现类
Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : 查询条件封装
UpdateWrapper : Update 条件封装
AbstractLambdaWrapper : 使用Lambda 语法
LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
但是我们一般最常用的是QueryWrapper ,其他的不常用
2、测试QueryWrapper
(1)查询提示表
查询方式 | 说明 |
---|---|
setSqlSelect | 设置 SELECT 查询字段 |
where | WHERE 语句,拼接 + WHERE 条件 |
and | AND 语句,拼接 + AND 字段=值 |
andNew | AND 语句,拼接 + AND (字段=值) |
or | OR 语句,拼接 + OR 字段=值 |
orNew | OR 语句,拼接 + OR (字段=值) |
eq | 等于= |
allEq | 基于 map 内容等于= |
ne | 不等于<> |
gt | 大于> |
ge | 大于等于>= |
lt | 小于< |
le | 小于等于<= |
like | 模糊查询 LIKE |
notLike | 模糊查询 NOT LIKE |
in | IN 查询 |
notIn | NOT IN 查询 |
isNull | NULL 值查询 |
isNotNull | IS NOT NULL |
groupBy | 分组 GROUP BY |
having | HAVING 关键词 |
orderBy | 排序 ORDER BY |
orderAsc | ASC 排序 ORDER BY |
orderDesc | DESC 排序 ORDER BY |
exists | EXISTS 条件语句 |
notExists | NOT EXISTS 条件语句 |
between | BETWEEN 条件语句 |
notBetween | NOT BETWEEN 条件语句 |
addFilter | 自由拼接 SQL |
last | 拼接在最后,例如:last(“LIMIT 1”) |
(2)ge、gt、le、lt、isNull、isNotNull示例
测试ge,其他类似
@Test
public void testSelectListOrderBy() {
QueryWrapper<User>queryWrapper = newQueryWrapper<>();
queryWrapper.orderByDesc("age", "id");
List<User>users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
(3)eq,ne 示例
@Test
public void testSelectOne() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "Tom");
//只能返回一条记录,多余一条则抛出异常
User user = userMapper.selectOne(queryWrapper);
System.out.println(user);
}
(4)between、notBetween示例
包含大小边界
@Test
public void testSelectCount() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// where age between 20 and 30
queryWrapper.between("age", 20, 30);
Integer count = userMapper.selectCount(queryWrapper); //返回数据数量
System.out.println(count);
}
(5)like、notLike、likeLeft、likeRight示例
selectMaps()返回Map集合列表,通常配合select()使用
select指定查询哪个列,
%占位符的位置
like默认为 %e%
likeRight e%
likeLeft %e
@Test
public void testSelectMaps() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper
.select("name", "age")
.like("name", "e")
.likeRight("email", "5");
List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);//返回值是Map列表
maps.forEach(System.out::println);
}
(6)orderBy、orderByDesc、orderByAsc示例
@Test
public void testSelectListOrderBy() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// order by age desc
queryWrapper.orderByDesc("age", "id");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
以上是关于04-MP物理删除&逻辑删除&条件构造器以及常用接口的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis-Plus:逻辑删除(@TableLogic 将数据标记为删除,而并非真正 的物理删除(非DELETE操作))