一、条件查询方式
MyBatisPlus将书写复杂的SQL查询条件进行封装,使用编程的形式完成查询条件的组合。
在上几篇博客,查询所有和分页查询,都能看到wrapper类,这个类就是用来构建查询条件的。
取消Spring日志打印
测试的时候,如果觉得控制台打印的日志比较多,速度比较慢,可以取消spring日志打印,resources目录下添加logback.xml,名称固定,格式固定,添加以下内容即可:
<?xml version="1.0" encoding="UTF-8"?> <configuration> </configuration>
打印日志过多的操作可以不用做,一般方便我们查看程序的运行结果。
取消SpringBoot和MyBatisPlus的log打印
除了日志的打印还有log的打印很占位置,取消MybatisPlus启动的banner图标:
application.yml添加如下内容:
# mybatis-plus日志控制台输出 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: banner: off # 关闭mybatisplus启动图标
取消SpringBoot的log图标打印
application.yml添加如下内容:
spring: main: banner-mode: off # 关闭SpringBoot启动图标(banner)
二、多条件构建查询
格式一:常规格式
QueryWrapper<User> qw = new QueryWrapper<User>(); //查询年龄大于等于18岁,小于65岁的用户 qw.lt("age",65); qw.ge("age",18); List<User> userList = userDao.selectList(qw); System.out.println(userList);
lt相当于(<)
SELECT id,name,password,age,tel FROM user WHERE (age < ?)
ge相当于(>)
SELECT id,name,password,age,tel FROM user WHERE (age > ?)
格式二:链式编程格式
QueryWrapper<User> qw = new QueryWrapper<User>(); //查询年龄大于等于18岁,小于65岁的用户 qw.lt("age",65).qw.ge("age",18); List<User> userList = userDao.selectList(qw); System.out.println(userList);
格式三:lambda格式(推荐)
QueryWrapper<User> qw = new QueryWrapper<User>(); //查询年龄大于等于18岁,小于65岁的用户 qw.lambda.lt(User::getAge,65).ge(User::getAge,18); List<User> userList = userDao.selectList(qw); System.out.println(userList);
User::getAge,为lambda表达式中的,类名::方法名,因为是链式编程,将大于小于都连接了,最终的sql语句为:
SELECT id,name,password,age,tel FROM user WHERE (age < ? AND age > ?)
格式四:lambda格式(推荐)
LambdaQueryWrapper<User> qw = new LambdaQueryWrapper<User>(); //查询年龄大于等于18岁,小于65岁的用户 qw.lt(User::getAge,65).ge(User::getAge,18); List<User> userList = userDao.selectList(qw); System.out.println(userList);
并且(and)
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); //查询年龄大于等于18岁,小于65岁的用户 lqw.lt(User::getAge,65).ge(User::getAge,18); List<User> userList = userDao.selectList(lqw); System.out.println(userList);
什么都不写,就默认是并且(and)的关系
或者(or)
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>(); //查询年龄大于等于18岁,小于65岁的用户 lqw.lt(User::getAge,65).or().ge(User::getAge,18); List<User> userList = userDao.selectList(lqw); System.out.println(userList);
or()就相当于我们sql语句中的or关键字,最终的sql语句为
SELECT id,name,password,age,tel FROM user WHERE (age < ? OR age > ?)