[MyBatisPlus]DQL编程控制②(查询投影、查询条件)

网友投稿 258 2022-09-05

[MyBatisPlus]DQL编程控制②(查询投影、查询条件)

文章目录

​​查询投影​​

​​查询指定字段​​​​聚合查询​​​​分组查询​​

​​查询条件​​

​​等值查询​​​​范围查询​​​​模糊查询​​​​排序查询​​

查询投影

查询指定字段

目前我们在查询数据的时候,什么都没有做默认就是查询表中所有字段的内容,我们所说的查询投影即不查询所有字段,只查询出指定内容的数据。

具体如何来实现?

@SpringBootTestclass Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ LambdaQueryWrapper lqw = new LambdaQueryWrapper(); lqw.select(User::getId,User::getName,User::getAge); List userList = userDao.selectList(lqw); System.out.println(userList); }}

select(…)方法用来设置查询的字段列,可以设置多个,最终的sql语句为:

SELECT id,name,age FROM user

如果使用的不是lambda,就需要手动指定字段

@SpringBootTestclass Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ QueryWrapper lqw = new QueryWrapper(); lqw.select("id","name","age","tel"); List userList = userDao.selectList(lqw); System.out.println(userList); }}

最终的sql语句为:SELECT id,name,age,tel FROM user

聚合查询

需求:聚合函数查询,完成count、max、min、avg、sum的使用count:总记录数max:最大值min:最小值avg:平均值sum:求和

@SpringBootTestclass Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ QueryWrapper lqw = new QueryWrapper(); //lqw.select("count(*) as count"); //SELECT count(*) as count FROM user //lqw.select("max(age) as maxAge"); //SELECT max(age) as maxAge FROM user //lqw.select("min(age) as minAge"); //SELECT min(age) as minAge FROM user //lqw.select("sum(age) as sumAge"); //SELECT sum(age) as sumAge FROM user lqw.select("avg(age) as avgAge"); //SELECT avg(age) as avgAge FROM user List> userList = userDao.selectMaps(lqw); System.out.println(userList); }}

为了在做结果封装的时候能够更简单,我们将上面的聚合函数都起了个名称,方面后期来获取这些数据

分组查询

需求:分组查询,完成 group by的查询使用

@SpringBootTestclass Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ QueryWrapper lqw = new QueryWrapper(); lqw.select("count(*) as count,tel"); lqw.groupBy("tel"); List> list = userDao.selectMaps(lqw); System.out.println(list); }}

groupBy为分组,最终的sql语句为

SELECT count(*) as count,tel FROM user GROUP BY

注意:

聚合与分组查询,无法使用lambda表达式来完成MP只是对MyBatis的增强,如果MP实现不了,我们可以直接在DAO接口中使用MyBatis的方式实现

查询条件

前面我们只使用了lt()和gt(),除了这两个方法外,MP还封装了很多条件对应的方法,这一节我们重点把MP提供的查询条件方法进行学习下。

MP的查询条件有很多:

范围匹配(> 、 = 、between)模糊匹配(like)空判定(null)包含性匹配(in)分组(group)排序(order)……

等值查询

需求:根据用户名和密码查询用户信息

@SpringBootTestclass Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ LambdaQueryWrapper lqw = new LambdaQueryWrapper(); lqw.eq(User::getName, "Jerry").eq(User::getPassword, "jerry"); User loginUser = userDao.selectOne(lqw); System.out.println(loginUser); }}

eq(): 相当于​​=​​,对应的sql语句为

SELECT id,name,password,age,tel FROM user WHERE (name = ? AND password = ?)

selectList:查询结果为多个或者单个selectOne:查询结果为单个

范围查询

需求:对年龄进行范围查询,使用lt()、le()、gt()、ge()、between()进行范围查询

@SpringBootTestclass Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ LambdaQueryWrapper lqw = new LambdaQueryWrapper(); lqw.between(User::getAge, 10, 30); //SELECT id,name,password,age,tel FROM user WHERE (age BETWEEN ? AND ?) List userList = userDao.selectList(lqw); System.out.println(userList); }}

gt():大于(>)ge():大于等于(>=)lt():小于(<)lte():小于等于(<=)between():between ? and ?

模糊查询

需求:查询表中name属性的值以​​J​​开头的用户信息,使用like进行模糊查询

@SpringBootTestclass Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ LambdaQueryWrapper lqw = new LambdaQueryWrapper(); lqw.likeLeft(User::getName, "J"); //SELECT id,name,password,age,tel FROM user WHERE (name LIKE ?) List userList = userDao.selectList(lqw); System.out.println(userList); }}

like():前后加百分号,如 %J%likeLeft():前面加百分号,如 %JlikeRight():后面加百分号,如 J%

排序查询

需求:查询所有数据,然后按照id降序

@SpringBootTestclass Mybatisplus02DqlApplicationTests { @Autowired private UserDao userDao; @Test void testGetAll(){ LambdaQueryWrapper lwq = new LambdaQueryWrapper<>(); /** * condition :条件,返回boolean, 当condition为true,进行排序,如果为false,则不排序 * isAsc:是否为升序,true为升序,false为降序 * columns:需要操作的列 */ lwq.orderBy(true,false, User::getId); userDao.selectList(lw }}

除了上面演示的这种实现方式,还有很多其他的排序方法可以被调用,如图:

orderBy排序

condition:条件,true则添加排序,false则不添加排序isAsc:是否为升序,true升序,false降序columns:排序字段,可以有多个

orderByAsc/Desc(单个column):按照指定字段进行升序/降序orderByAsc/Desc(多个column):按照多个字段进行升序/降序orderByAsc/Desc

condition:条件,true添加排序,false不添加排序多个columns:按照多个字段进行排序

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网站过时、营销力不足?你的网站改版升级了吗?
下一篇:[SSM]统一结果封装
相关文章

 发表评论

暂时没有评论,来抢沙发吧~