讲完条件查询 那么 我们整个数据层的代码就写完了
可以看到 我们之前的代码 查询语句都有一个 参数 QueryWrapper 这个就是查询条件
其实 我们可以直接这样写
QueryWrapper<book> Query = new QueryWrapper<>();
bookDao.selectList(Query);
QueryWrapper类需要手动引入 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
我们这里 QueryWrapper 然后泛型book 我们这个book实体类
这个Query就是条件
好 我们看一下 数据 book表
然后 我们看看 查询 name 中 包含猫的数据
我们编写代码如下
QueryWrapper<book> Query = new QueryWrapper<>();
Query.like("name","猫");
bookDao.selectList(Query);
运行结果如下
这里 就是将所有的 sql转成了 Api函数
例如等于 eq
QueryWrapper<book> Query = new QueryWrapper<>();
Query.eq("name","小猫猫");
bookDao.selectList(Query);
不等于 ne
QueryWrapper<book> Query = new QueryWrapper<>();
Query.ne("name","小猫猫");
bookDao.selectList(Query);
这里非常多
queryWrapper.lt()——小于
queryWrapper.le()——小于等于
queryWrapper.gt()——大于
queryWrapper.ge()——大于等于
queryWrapper.eq()——等于
queryWrapper.ne()——不等于
queryWrapper.betweeen(“age”,10,20)——age在值10到20之间
queryWrapper.notBetweeen(“age”,10,20)——age不在值10到20之间
queryWrapper.like(“属性”,“值”)——模糊查询匹配值‘%值%’
queryWrapper.notLike(“属性”,“值”)——模糊查询不匹配值‘%值%’
queryWrapper.likeLeft(“属性”,“值”)——模糊查询匹配最后一位值‘%值’
queryWrapper.likeRight(“属性”,“值”)——模糊查询匹配第一位值‘值%’
queryWrapper.isNull()——值为空或null
queryWrapper.isNotNull()——值不为空或null
queryWrapper.in(“属性”,条件,条件 )——符合多个条件的值
queryWrapper.notIn(“属性”,条件,条件 )——不符合多个条件的值
queryWrapper.or()——或者
queryWrapper.and()——和
queryWrapper.orderByAsc(“属性”)——根据属性升序排序
queryWrapper.orderByDesc(“属性”)——根据属性降序排序
queryWrapper.inSql(“sql语句”)——符合sql语句的值
queryWrapper.notSql(“sql语句”)——不符合SQL语句的值
queryWrapper.esists(“SQL语句”)——查询符合SQL语句的值
queryWrapper.notEsists(“SQL语句”)——查询不符合SQL语句的值
然后 他还有另一种方式
我们编写代码如下
LambdaQueryWrapper<book> Query = new LambdaQueryWrapper<>();
Query.ne(book::getName,"小猫猫");
bookDao.selectList(Query);
这个东西的好处在于 你用QueryWrapper 可能存在 第一个参数 字段名写错了 这样整个函数就废了
但是 LambdaQueryWrapper 他是 类名::字段名 这样 他有语法编辑器的验证 你想写错都难
但是 目前就还有一个问题 像我们后面写 第二个条件通常就不是直接写死值了 而是通过一个变量给你传过来
那就很可能存在参数没哟 null的情况
String name = null;
LambdaQueryWrapper<book> Query = new LambdaQueryWrapper<>();
Query.eq(book::getName,name);
bookDao.selectList(Query);
这里 我们模拟了一下 运行结果如下
sql都写变形了 啥都没查出来
按我们之前的方法就是
String name = null;
LambdaQueryWrapper<book> Query = new LambdaQueryWrapper<>();
if(name != null)Query.eq(book::getName,name);
bookDao.selectList(Query);
运行结果如下
全查出来了 因为 你判断if 如果没有 就直接不加这个条件了 所以 自然就是没有条件 查全部了
其实我们可以这样改
Query.eq(true,book::getName,name);
这是利用了方法重写 就是 他有另一种传法 接受三个参数 第一个值 为 布尔类型
true 执行 false 不执行 那么 我们就可以将代码改成这样
String name = null;
LambdaQueryWrapper<book> Query = new LambdaQueryWrapper<>();
Query.eq(name != null,book::getName,name);
bookDao.selectList(Query);
运行结果如下
我们没有加到这个条件
因为 我们第一个值 用了个判断 name 不等于 null 但是 name就是个null啊 所以 条件返回的是 false
这个语句条件就没有执行