MybatisPlus【SpringBoot】 5 条件构造器和常用接口 5.1 wrapper 介绍 & 5.2 QueryWrapper
MybatisPlus【SpringBoot】 5 条件构造器和常用接口 5.1 wrapper 介绍 & 5.2 QueryWrapper
MybatisPlus【SpringBoot】
【【尚硅谷】2022版MyBatisPlus教程(一套玩转mybatis-plus)】
5 条件构造器和常用接口
文章目录
5.1 wrapper 介绍
- Wrapper : 条件构造抽象类,最顶端父类
- AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
- QueryWrapper : 查询条件封装
- UpdateWrapper : Update 条件封装
- AbstractLambdaWrapper : 使用Lambda 语法
- LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
- LambdaUpdateWrapper : Lambda 更新封装Wrapper
- AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
5.2 QueryWrapper
5.2.1 例1:组装查询条件
查询用户名包含a,年龄在20到30之间,并且邮箱不为null的用户信息
SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (username LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)
//查询用户名包含a,年龄在20到30之间,并且邮箱不为null的用户信息
@Test
public void test01(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("username","a")
.between("age",20,30)
.isNotNull("email");
List<User> list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
}
测试结果:
这是因为数据库中,唯一一条满足条件的记录已经被我们逻辑删除了。
把第一条数据的逻辑删除手动改成0,再试一次
5.2.2 例2:组装排序条件
按年龄降序查询用户,如果年龄相同则按id升序排列
SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 ORDER BY age DESC,id ASC
//按年龄降序查询用户,如果年龄相同则按id升序排列
@Test
public void test02(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("age")
.orderByAsc("id");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
测试结果
5.2.3 例3:组装删除条件
删除email为空的用户
DELETE FROM t_user WHERE (email IS NULL)【因为我们设置了逻辑删除,所以只是更新操作】
//删除email为空的用户
@Test
public void test03(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNull("email");
int result = userMapper.delete(queryWrapper);
System.out.println("受影响的行数:" + result);
}
测试结果:
5.2.4 例4:条件的优先级
将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改
UPDATE t_user SET age=?, email=? WHERE (username LIKE ? AND age > ? OR email IS NULL)
//将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改
@Test
public void test04(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("username","a")
.gt("age",20)
.or()
.isNull("email");
User user = new User();
user.setAge(18);
user.setEmail("user@atguigu.com");
int result = userMapper.update(user,queryWrapper);
System.out.println("受影响的行数:" + result);
}
测试结果:
将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息修改
UPDATE t_user SET age=?, email=? WHERE (username LIKE ? AND (age > ? OR email IS NULL))
lambda表达式内的逻辑优先运算
//将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息修改
@Test
public void test05() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("username", "a")
.and(i -> i.gt("age", 20).or().isNull("email"));
User user = new User();
user.setAge(18);
user.setEmail("hah@atguigu.com");
int result = userMapper.update(user,queryWrapper);
System.out.println("受影响的行数:" + result);
}
测试结果
OK。
5.2.5 例5:组装select子句
查询用户信息的username和age字段
SELECT username,age FROM t_user
//查询用户信息的username和age字段
@Test
public void test06(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("username","age");
List<Map<String , Object>> maps = userMapper.selectMaps(queryWrapper);
maps.forEach(System.out::println);
}
5.2.6 例6:实现子查询
查询id小于等于3的用户信息
SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE (id IN
(select id from t_user where id <= 3))
//查询id小于等于3的用户信息
@Test
public void test07(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.inSql("uid","select uid from t_user where uid <= 3");
List<User> list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
}
测试结果:
OK。
更多推荐
所有评论(0)