MybatisPlus特殊查询的实现介绍

目录
  • 一.查询投影
  • 二.聚合查询
  • 三.分组查询
  • 四.查询条件
    • 4.1 等值查询
    • 4.2 范围查询
    • 4.3 模糊查询
    • 4.4 排序查询

一.查询投影

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

@Test
void 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使用聚合函数进行查询

@SpringBootTest
class 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的查询使用

@SpringBootTest
class 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 等值查询

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

@SpringBootTest
class 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()进行范围查询

@SpringBootTest
class 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进行模糊查询

@SpringBootTest
class 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 ?)

  • like():前后加百分号,如 %美%
  • likeLeft():前面加百分号,如 %美
  • likeRight():后面加百分号,如 美%

4.4 排序查询

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

@SpringBootTest
class 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:按照多个字段进行排序

到此这篇关于MybatisPlus特殊查询的实现介绍的文章就介绍到这了,更多相关MybatisPlus特殊查询内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用MyBatis进行简单的更新与查询方式

    目录 MyBatis增删改查的用法 sql映射文件 myBatis框架的缓存 myBatis框架的新增 myBatis框架的更新 myBatis框架的删除 myBatis框架的简单查询 MyBatis框架的结果映射 resultType和resultMap总结 MyBatis增删改查的用法 sql映射文件 sql映射文件中的顶级元素说明 元素 说明 mapper sql映射文件的根元素,只有一个属性namespace,用于区分不同的mapper,必须全局唯一. cache 为给定命名空间配置缓存

  • Mybatis多表查询与动态SQL特性详解

    目录 1.较复杂的查询操作 1.1 参数占位符 #{} 和 ${} 1.2SQL注入 1.3like查询 1.4resultType与resultMap 1.4多表查询 1.4.1一对一表映射 1.4.2一对多表映射 2.动态SQL 2.1if标签 2.2trim标签 2.3where标签 2.4set标签 2.5foreach标签 总结 1.较复杂的查询操作 1.1 参数占位符 #{} 和 ${} #{}:预处理符,如将id=#{2}替换为id=?,然后使用2替换?. ${}:替换符,如将id

  • MyBatis动态sql查询及多参数查询方式

    目录 MyBatis动态sql 动态sql处理简单的多参数查询 动态sql处理更新功能 动态sql扩展 动态sql处理集合参数 foreach标签处理数组类型参数 foreach标签处理List类型参数 foreach标签处理Map类型参数 分页功能 基于MySql的分页查询 MyBatis动态sql 动态sql处理简单的多参数查询 常用标签 标签 说明 if 条件判断,与java中的if语句类似 where 为sql语句动态添加where关键字 choose 条件判断,这是一个组合标签,需要与

  • Mybatis表的关联查询详情

    目录 导语 什么时候用<resultMap>标签映射 什么时候用<association>&<collection> Mybatis表的关联查询 一对多查询 多对一查询 一对一查询 多对多查询 导语 关于<resultMap>标签映射,<association>&<collection>的使用 什么时候用<resultMap>标签映射 1.当我们查询结果的返回值是由对象封装的且对象中封装了另一个对象时,用标

  • Mybatis各种查询接口使用详解

    目录 一.查询一个实体类对象 二.查询一个list集合 三.查询单个数据 四.查询一个数据为map集合 五.查询多条数据为map集合 一.查询一个实体类对象 ①创建SelectMapper接口 若sql语句查询的结果为多条时,一定不能以实现类类型作为方法的返回值 否则会抛出异常TooManyResultsException 若sql语句查询的结果为1条时,此时可以使用实体类类型或list集合类型作为方法的返回值 /** * 根据id查询用户信息 * @param id * @return */

  • MybatisPlus特殊查询的实现介绍

    目录 一.查询投影 二.聚合查询 三.分组查询 四.查询条件 4.1 等值查询 4.2 范围查询 4.3 模糊查询 4.4 排序查询 一.查询投影 查询投影又称查询指定字段 @Test void testGetAll07(){ LambdaQueryWrapper<Users> lqw = new LambdaQueryWrapper<Users>(); lqw.select(Users::getId,Users::getName,Users::getAge); List<U

  • MybatisPlus分页查询与多条件查询介绍及查询过程中空值问题的解决

    目录 前言 一.分页处理 1.调用方法传入参数获取返回值 2.设置分页拦截器 二.条件查询 2.1通过QueryWrapper对象来执行分页查询 2.2在QueryWrapper对象的基础上使用lambda表达式 2.3直接通过LambdaQueryWrapper对象 三.多条件查询 3.1且的情况 3.2或的情况 四.null判定 前言 MP这样一款强大的持久层框架处理起来复杂的SQL来也是得心应手,效率极高,快快与我一同领略Plus的独特魅力吧 一.分页处理 1.调用方法传入参数获取返回值

  • MyBatis-Plus 分页查询以及自定义sql分页的实现

    一.引言 分页查询每个人程序猿几乎都使用过,但是有部分同学不懂什么是物理分页和逻辑分页. 物理分页:相当于执行了limit分页语句,返回部分数据.物理分页只返回部分数据占用内存小,能够获取数据库最新的状态,实施性比较强,一般适用于数据量比较大,数据更新比较频繁的场景. 逻辑分页:一次性把全部的数据取出来,通过程序进行筛选数据.如果数据量大的情况下会消耗大量的内存,由于逻辑分页只需要读取数据库一次,不能获取数据库最新状态,实施性比较差,适用于数据量小,数据稳定的场合. 那么MP中的物理分页怎么实现

  • mybatis-plus分页查询的实现示例

    按照官方文档进行的配置:快速开始|mybatis-plus 引入依赖: <!-- 引入mybatisPlus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <!--

  • MyBatis-plus 模糊查询的使用

    在使用MyBatis-plus的时候,一些基础的增删改查可以不用再自己写sql了: public interface UserDao extends BaseMapper<FykUser>{ } 就这样,就可以实现user表的增删改查了. 模糊查询 使用userDao.selectList(queryWrapper)方法,就可以查询出一个用户列表. 如果需要模糊查询,代码如下: //条件封装 QueryWrapper<FykUser> queryWrapper = new Quer

  • MybatisPlus关联查询的完美实现方案

    目录 Mybatis-Plus 简介 连表?Left Join?Inner Join? 旧版代码 新版优化 相关工具类 总结 Mybatis-Plus 简介 什么是 MyBatis-Plus?Mybatis-Plus:为简化开发而生 MyBatis-Plus(简称 MP)是一个基于 MyBatis 的增强工具,它对 Mybatis 的基础功能进行了增强,但未做任何改变.使得我们可以可以在 Mybatis 开发的项目上直接进行升级为 Mybatis-plus,正如它对自己的定位,它能够帮助我们进一

  • MyBatis-Plus 分页查询的实现示例

    方法: 使用selectPage()方法,第一个参数是传入分页方法(传入当前页和当前显示多少条数据),第二个参数是传入查询条件(如果查询全部的话,可以传null). 前提: 表中的数据为: 第一种方式: //分页查询 Page<Employee> employees = employeeMapper.selectPage(new Page<>(3, 2), null); System.out.println("数据为:"+employees.getRecords

  • MyBatis-Plus 条件查询器的实现

    目录 一.常用注解 1.1 @TableName 1.2 @TableId 1.3 @TableField 1.4 @TableLogic 二.条件构造器Wrapper 2.1 QueryWrapper 2.2 UpdateWrapper 三.MyBatis-Plus分页插件 3.1 实现步骤 四.通用枚举 4.1 数据库表添加字段sex 4.4 测试 五.多数据源 5.1 创建数据库及表 5.3 配置多数据源 5.4 创建新库中Product对应的类 本篇的主要代码依赖于之前的通用Mapper

  • Mybatis-Plus时间范围查询方式详解

    目录 方式一 方式二 请求方式 传参类型 方式一 通过apply方法,来实现时间范围查询,该方法可用于数据库函数,动态入参的params对应前面applySql内部的{index}部分,这样是不会有sql注入风险的,反之会有! apply(boolean condition, String applySql, Object... params) 反例: queryWrapper.apply(StrUtil.isNotBlank(serviceItemListDto.getStartTime())

  • Mysql日期查询的详细介绍

    查询当前日期 SELECT CURRENT_DATE(); SELECT CURDATE(); 查询当前日期和时间 SELECT NOW(); 查询今天的数据 SELECT * FROM `表名` WHERE TO_DAYS(NOW()) = TO_DAYS(`字段`); SELECT * FROM `表名` WHERE TO_DAYS(NOW()) - TO_DAYS(`字段`) = 0; 查询昨天的数据 SELECT * FROM ``表名`` WHERE TO_DAYS(`字段`) = T

随机推荐