深入浅出Mybatis Plus QueryWrapper

一、创建QueryWrapper对象

QueryWrapper是Mybatis Plus提供的一个查询条件构造器,通过它可以灵活的构造相应的查询条件来实现复杂查询的功能。创建一个QueryWrapper的方式很简单,只需要调用静态方法QueryWrapper()即可:

QueryWrapper queryWrapper = new QueryWrapper();

其中,User是要查询的实体类,通过泛型的方式来指定。创建好QueryWrapper对象之后,就可以开始按照自己的需求添加各种查询条件了。

二、添加查询条件

QueryWrapper提供了丰富的方法来添加各种查询条件,这里介绍几种常用的方法。

1、eq方法

eq方法用来添加等于条件,例如:

queryWrapper.eq("name", "Jack");

表示查询name等于”Jack”的记录。

2、like方法

like方法用来添加模糊查询条件,例如:

queryWrapper.like("name", "Jac");

表示查询name包含”Jac”的记录。

3、between方法

between方法用来添加区间查询条件,例如:

queryWrapper.between("age", 18, 30);

表示查询age在18到30之间的记录。

4、in方法

in方法用来添加in查询条件,例如:

queryWrapper.in("id", 1, 3, 5);

表示查询id为1或3或5的记录。

5、isNull和isNotNull方法

isNull和isNotNull方法用来添加空值查询条件,例如:

queryWrapper.isNull("email");

表示查询email为空的记录。

6、orderBy方法

orderBy方法用来添加排序条件,例如:

queryWrapper.orderBy(true, true, "age");

表示按照age升序排序。

三、链式查询

Mybatis Plus的QueryWrapper支持链式查询,也就是在一个QueryWrapper对象上不断添加多个查询条件,例如:

queryWrapper.eq("name", "Jack")
            .like("email", "@test.com")
            .between("age", 18, 30)
            .orderBy(true, true, "age");

表示查询name为”Jack”,email包含”@test.com”,age在18到30之间的记录,并且按照age升序排序。

四、Lambda查询

Mybatis Plus还提供了一种更加简洁的查询方式,即通过Lambda表达式来构造查询条件。Lambda表达式可以用来指定查询实体中某些字段的值,例如:

LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper()
                .eq(User::getName, "Jack")
                .like(User::getEmail, "@test.com")
                .between(User::getAge, 18, 30)
                .orderBy(true, true, User::getAge);

表示查询name为”Jack”,email包含”@test.com”,age在18到30之间的记录,并且按照age升序排序。通过Lambda表达式,我们可以直接指定实体类中的属性,不需要再通过字符串来指定字段名,避免了因为拼写错误等问题而导致的查询失败。

五、高级查询

1、查询中使用子查询

在QueryWrapper中也可以使用子查询来实现更加复杂的查询。例如,我们可以通过下面的方式来查询user_id在一个子查询中查出的记录:

QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.inSql("user_id", "select id from user where age < 20");

其中,inSql方法用来添加一个IN语句,需要传入一个子查询的SQL语句。

2、查询结果映射到Dto

有时候,我们想要将查询结果映射到一个自定义的Dto对象中,可以通过以下方式实现:

QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.lambda()
        .eq(User::getName, "Jack")
        .select(User::getName, User::getEmail, User::getAge)
        .last("limit 1");

List userDtoList = userMapper.selectObjs(queryWrapper).stream()
        .map(obj -> BeanUtil.toBean(obj, UserDto.class))
        .collect(Collectors.toList());

其中,select方法用来指定需要查询的字段,last方法用来添加where语句之后的部分,这里是添加limit 1。最后通过selectObjs方法查询出结果后,将每一个结果对象转换成Dto对象。

六、总结

至此,我们对Mybatis Plus中的QueryWrapper做了一个全面的介绍,包括创建对象、添加查询条件、链式查询、Lambda查询、高级查询等方面。QueryWrapper可以帮助我们灵活构造相应的查询条件,在查询数据时提高我们的效率和准确性。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/252076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-13 17:34
下一篇 2024-12-13 17:34

相关推荐

  • 理解Mybatis中的SQL Limit用法

    Mybatis是一种非常流行的ORM框架,提供了SQL映射配置文件,可以使用类似于传统SQL语言的方式编写SQL语句。其中,SQL的Limit语法是一个非常重要的知识点,能够实现分…

    编程 2025-04-29
  • Mybatis-plus条件构造器

    一、可重用性 Mybatis-plus作为Mybatis的扩展工具,提供了丰富的功能让开发更加高效便捷。其中之一的条件构造器可以帮助我们构建各种查询条件,而且支持链式调用,非常适合…

    编程 2025-04-25
  • Mybatis中update if详解

    一、if标签的基本用法 在Mybatis中使用update语句更新数据库表中的一条或多条数据,我们通常通过if标签来动态生成update语句。if标签的使用方法如下: <up…

    编程 2025-04-25
  • 深入浅出统计学

    统计学是一门关于收集、分析、解释和呈现数据的学科。它在各行各业都有广泛应用,包括社会科学、医学、自然科学、商业、经济学、政治学等等。深入浅出统计学是指想要学习统计学的人能够理解统计…

    编程 2025-04-25
  • Mybatis批量插入操作

    一、基本概念 Mybatis是一种基于java的持久层框架,旨在帮助开发人员简化数据库操作。该框架提供了多种方式来执行数据库操作,其中包括批量插入。批量插入是一种在单个事务中提交多…

    编程 2025-04-25
  • MyBatis如何防止SQL注入

    MyBatis是一款开源的持久层框架,它可以简化Java应用程序中的数据持久化过程,并提供了许多有用的功能。然而,安全问题一直是Web应用程序的一大挑战,其中最严重的问题之一是SQ…

    编程 2025-04-25
  • 深入浅出torch.autograd

    一、介绍autograd torch.autograd 模块是 PyTorch 中的自动微分引擎。它支持任意数量的计算图,可以自动执行前向传递、后向传递和计算梯度,同时提供很多有用…

    编程 2025-04-24
  • Mybatis-plus 日志详解

    一、日志框架概述 1、什么是日志框架 日志框架是一个用于管理日志的工具,使用日志框架可以帮助开发人员记录程序运行时产生的信息、警告和错误消息。常用的日志框架有log4j和logba…

    编程 2025-04-24
  • 深入浅出SQL占位符

    一、什么是SQL占位符 SQL占位符是一种占用SQL语句中某些值的标记或占位符。当执行SQL时,将使用该标记替换为实际的值,并将这些值传递给查询。SQL占位符使查询更加安全,防止S…

    编程 2025-04-24
  • 深入浅出ThinkPHP框架

    一、简介 ThinkPHP是一款开源的PHP框架,它遵循Apache2开源协议发布。ThinkPHP具有快速的开发速度、简便的使用方式、良好的扩展性和丰富的功能特性。它的核心思想是…

    编程 2025-04-24

发表回复

登录后才能评论