目标:
了解 Mybatis-Plus 的条件构造器
学习步骤:
1、何为 条件构造器2、有哪些条件构造器
3、测试条件构造器
一、何为 条件构造器
记得我们刚开始学 MyBatis-Plus
有一个测试案例,是这样子的
其中,这个queryWrapper 就是条件构造器
同时我们可以从官网上看到这样一句话 传输 wrapper 可以类比为你的 controller 用 map 接收值(开发一时爽,维护火葬场)
二、条件构造器有哪些
可以看到 Wrapper
是一个抽象类,说明我们要使用他的实现类
同样的,AbstractWrapper
也是一个抽象类
不过,官网介绍了,AbstractWrapper
是QueryWrapper(LambdaQueryWrapper) 和UpdateWrapper(LambdaUpdateWrapper) 的父类,用于生成 sql 的 where 条件, 实体类属性也用于生成 sql 的 where 条件
三、测试条件构造器
AbstractWrapper
的方法众多,我们使用他的实现类来测试
具体方法也可以参考官网:AbstractWrapper方法
先看
QueryWrapper
QueryWrapper
继承自 AbstractWrapper
, 自身的内部属性 实体类 也用于生成 where 条件
及 LambdaQueryWrapper
, 可以通过 new QueryWrapper().lambda()
方法获取
测试一:
@Test
/*查询邮箱不为空、并且年龄大于20岁的用户*/
void test1(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNotNull("email").ge("age",20);
List<User> users = userMapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}
测试二:
@Test
/*查询指定姓名*/
void test2(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name","Tom");
// 查询一个数据(有且仅有),如果出现多个结果请使用selectList
User user = userMapper.selectOne(wrapper);
System.out.println(user);
}
测试三:
@Test
/*查询年龄在20-25之间用户的数量*/
void test3(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.between("age",20,25);
Integer res = userMapper.selectCount(wrapper);
System.out.println(res);
}
测试四:
@Test
/*模糊查询*/
void test4(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("name","cs");
List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
for (Map<String, Object> map : maps) {
System.out.println(map);
}
}
测试五:
@Test
/*测试子查询*/
void test5(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
/*name 在子查询中查出来*/
wrapper.inSql("name","select name from user where name = 'csnz'");
List<Object> list = userMapper.selectObjs(wrapper);
for (Object o : list) {
System.out.println(o);
}
}
测试六:
@Test
/*排序*/
void test6(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
// 通过id降序排序
wrapper.orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}
再看
UpdateWrapper
UpdateWrapper
继承自 AbstractWrapper ,自身的内部属性 实体类 也用于生成 where 条件
及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda()
方法获取!
测试:
@Test
/*测试邮箱为空的用户*/
void test(){
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.isNull("email");
List<User> users = userMapper.selectList(wrapper);
for (User user : users) {
System.out.println(user);
}
}