文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【MybatisPlus】MP来实现一些特殊的查询

2023-08-31 11:30

关注

文章目录

一.查询投影

查询投影又称查询指定字段

@Testvoid testGetAll07(){    LambdaQueryWrapper<Users> lqw = new LambdaQueryWrapper<Users>();    lqw.select(Users::getId,Users::getName,Users::getAge);    List<Users> userList = userDao.selectList(lqw);    System.out.println(userList);}

比如下面查询的结果就隐藏了password、tel字段
在这里插入图片描述

二.聚合查询

使用通过MP使用聚合函数进行查询

@SpringBootTestclass Mybatisplus{    @Autowired    private UserDao userDao;        @Test    void testGetAll(){        QueryWrapper<User> lqw = new QueryWrapper<User>();        //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<Map<String, Object>> userList = userDao.selectMaps(lqw);        System.out.println(userList);    }}

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

三.分组查询

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

@SpringBootTestclass Mybatisplus{    @Autowired    private UserDao userDao;        @Test    void testGetAll09(){        QueryWrapper<Users> lqw = new QueryWrapper<Users>();        lqw.select("count(*) as count,age");        lqw.groupBy("age");        List<Map<String, Object>> list = userDao.selectMaps(lqw);        System.out.println(list);    }}

groupBy为分组,最终的sql语句为:
SELECT count(*) as count,age FROM users GROUP BY age
在这里插入图片描述
注:
聚合与分组查询,无法使用lambda表达式来完成
MP只是对MyBatis的增强,如果MP实现不了,我们可以直接在DAO接口中使用MyBatis的方式实现

四.查询条件

4.1 等值查询

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

@SpringBootTestclass Mybatisplus{    @Autowired    private UserDao userDao;        @Test    void testGetAll13(){        LambdaQueryWrapper<Users> lqw = new LambdaQueryWrapper<Users>();        lqw.eq(Users::getName, "懒羊羊").eq(Users::getPassword, "123456");        Users users = userDao.selectOne(lqw);        System.out.println(users);    }}

eq(): 相当于 =,对应的sql语句为
SELECT id,name,password,age,tel FROM user WHERE (name = ? AND password = ?)
在这里插入图片描述
selectList:查询结果为多个或者单个
selectOne:查询结果为单个

4.2 范围查询

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

@SpringBootTestclass Mybatisplus{    @Autowired    private UserDao userDao;        @Test    void testGetAll12(){        LambdaQueryWrapper<Users> lqw = new LambdaQueryWrapper<Users>();        lqw.between(Users::getAge, 10, 30);        List<Users> userList = userDao.selectList(lqw);        System.out.println(userList);    }}

与之对应的SQL为:
SELECT id,name,password,age,tel FROM user WHERE (age BETWEEN ? AND ?)
在这里插入图片描述

4.3 模糊查询

查询表中name属性的值包含‘美’字的用户信息,使用like进行模糊查询

@SpringBootTestclass Mybatisplus {    @Autowired    private UserDao userDao;        @Test    void testGetAll10(){        LambdaQueryWrapper<Users> lqw = new LambdaQueryWrapper<Users>();        lqw.like(Users::getName, "美");        List<Users> userList = userDao.selectList(lqw);        System.out.println(userList);    }}

最后也是通过一个字查到了美羊羊
在这里插入图片描述
对应的SQL为:
SELECT id,name,password,age,tel FROM user WHERE (name LIKE ?)

4.4 排序查询

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

@SpringBootTestclass Mybatisplus{    @Autowired    private UserDao userDao;        @Test    void testGetAll11(){        LambdaQueryWrapper<Users> lwq = new LambdaQueryWrapper<>();        lwq.orderBy(true,true, Users::getId);        List<Users> users = userDao.selectList(lwq);        System.out.println(users);    }}

查询结果如下:
在这里插入图片描述
condition :条件,返回boolean,当condition为true,进行排序,如果为false,则不排序
isAsc:是否为升序,true为升序,false为降序
columns:需要操作的列
在这里插入图片描述

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

  • orderByAsc/Desc(单个column):按照指定字段进行升序/降序
  • orderByAsc/Desc(多个column):按照多个字段进行升序/降序
  • orderByAsc/Desc * condition:条件,true添加排序,false不添加排序 * 多个columns:按照多个字段进行排序

来源地址:https://blog.csdn.net/weixin_57535055/article/details/126926372

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯