当前位置: 首页 > news >正文

【MyBatis-Plus】之queryWrapper.apply用法

目录

一、queryWrapper.apply的含义及其用法

二、其他方法

三、注意事项


官网地址:MyBatis-Plus https://baomidou.com/

一、queryWrapper.apply的含义及其用法

QueryWrapper.apply() 是 MyBatis-Plus 提供的方法,用于构建动态 SQL 查询条件。它允许你通过传递一个对象来动态生成 SQL 查询条件

QueryWrapper 是一个包装类,用于构建查询条件。它提供了一系列方法来添加不同类型的查询条件,如等于、大于、小于、模糊匹配等。

apply() 方法接受一个对象作为参数,该对象的属性名和值将被用于构建 SQL 查询条件。它会根据对象的属性名和值,自动生成相应的 SQL 条件语句。

例如:queryWrapper.apply("DATE(visit_date) = '" + today.toString() + "'")

这段代码中的 queryWrapper.apply("DATE(visit_date) = '" + today.toString() + "'");它的作用是向查询条件中添加一段自定义的 SQL 片段。在这里的具体含义是:筛选出 visit_date 字段等于今天日期的数据。

更具体地说,这段代码会生成类似于 DATE(visit_date) = '2024-02-26' 的 SQL 语句,其中 today.toString() 返回的是当前日期(例如 "2024-02-26"),所以这段 SQL 就是用来筛选出 visit_date 等于今天日期的数据记录。

下面是一个简单的示例,演示如何使用 QueryWrapper.apply() 方法构建动态 SQL 查询条件:

// 引入相关依赖
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;public class DynamicQueryExample {public static void main(String[] args) {// 创建一个 QueryWrapper 对象QueryWrapper<Users> queryWrapper = new QueryWrapper<>();// 设置查询条件queryWrapper.apply("name", "like", "%张%");queryWrapper.apply("age", "gt", 18);// 执行查询Page<Users> page = usersService.page(new Page<>(1, 10), queryWrapper);// 输出查询结果System.out.println(page.getRecords());}
}// Users 是你的实体类,需要继承 com.baomidou.mybatisplus.core.incrementer.Model
// com.baomidou.mybatisplus.core.mapper.BaseMapper 是 MyBatis-Plus 提供的基础 Mapper 接口
// usersService 是你的 Users 服务类,需要实现 IUserService 接口
// IUserService 是你定义的 Users 服务接口

二、其他方法

除了 QueryWrapper.apply() 方法,MyBatis-Plus 还提供了其他方法来构建动态 SQL 查询条件。以下是一些常用的方法:

  1. eq():用于添加等于条件,接受一个字段名和值作为参数。
  2. ne():用于添加不等于条件,接受一个字段名和值作为参数。
  3. gt():用于添加大于条件,接受一个字段名和值作为参数。
  4. lt():用于添加小于条件,接受一个字段名和值作为参数。
  5. ge():用于添加大于等于条件,接受一个字段名和值作为参数。
  6. le():用于添加小于等于条件,接受一个字段名和值作为参数。
  7. between():用于添加范围条件,接受一个字段名、最小值和最大值作为参数。
  8. in():用于添加多个值的条件,接受一个字段名和一个值列表作为参数。
  9. like():用于添加模糊匹配条件,接受一个字段名和一个模式作为参数。
  10. notIn():用于添加不在多个值列表中的条件,接受一个字段名和一个值列表作为参数。

这些方法可以组合使用,以构建复杂的动态 SQL 查询条件。例如,你可以使用多个 eq() 方法来添加多个等于条件,或者使用 and() 方法来组合多个条件。

三、注意事项

在使用 QueryWrapper 类的方法构建动态 SQL 查询条件时,需要注意以下几点:

  1. 字段名:传递给 QueryWrapper 类的方法的字段名必须是数据库表中的实际字段名。如果字段名不正确,将无法正确构建查询条件。

  2. 参数类型:传递给 QueryWrapper 类的方法的参数类型必须与数据库表中的字段类型相匹配。如果参数类型不正确,将无法正确构建查询条件。

  3. 条件组合:可以使用 and() 方法或 or() 方法来组合多个条件。如果需要添加多个条件,可以使用 QueryWrapper 类的 all() 方法来添加多个条件。

  4. 参数传递:如果传递的参数是复杂对象,需要确保该对象的属性名与数据库表中的字段名相匹配。如果参数是列表或集合,需要确保传递的参数类型与数据库表中的字段类型相匹配。

  5. 数据库方言:MyBatis-Plus 支持多种数据库方言,不同的数据库方言可能对 SQL 语法有不同的要求。因此,在使用 QueryWrapper 类的方法构建动态 SQL 查询条件时,需要根据所使用的数据库方言进行调整。

总之,在使用 QueryWrapper 类的方法构建动态 SQL 查询条件时,需要注意字段名、参数类型、条件组合、参数传递和数据库方言等问题,以确保正确构建查询条件。

如何确保传递给`QueryWrapper`类的方法的参数是有效的?

在使用 QueryWrapper 类的方法构建动态 SQL 查询条件时,为了确保传递给 QueryWrapper 类的方法的参数是有效的,可以采取以下几个步骤:

  1. 验证参数类型:传递给 QueryWrapper 类的方法的参数类型必须与数据库表中的字段类型相匹配。如果参数类型不正确,将无法正确构建查询条件。因此,在传递参数之前,需要确保参数类型是正确的。

  2. 验证参数值:传递给 QueryWrapper 类的方法的参数值必须是有效的。如果参数值无效,将无法正确构建查询条件。因此,在传递参数之前,需要确保参数值是有效的。

  3. 处理空值:如果传递给 QueryWrapper 类的方法的参数值为空,需要根据具体情况进行处理。例如,如果要添加等于条件,传递的参数值为空,可以使用 isNotNull() 方法来添加不为空的条件。

  4. 处理复杂对象:如果传递的参数是复杂对象,需要确保该对象的属性名与数据库表中的字段名相匹配。如果参数是列表或集合,需要确保传递的参数类型与数据库表中的字段类型相匹配。

  5. 处理日期类型:如果传递的参数是日期类型,需要确保参数值的格式与数据库表中的字段类型相匹配。不同的数据库可能对日期类型的格式有不同的要求。

  6. 处理字符串类型:如果传递的参数是字符串类型,需要确保参数值的格式与数据库表中的字段类型相匹配。不同的数据库可能对字符串类型的格式有不同的要求。

参考

LambdaQueryWrapper的条件构造器方法对应Sql_后端_LouisMin23-华为云开发者联盟

Mybatis plus条件构造器QueryWrapper的简单用法_querywrapper.eq-CSDN博客

http://www.lryc.cn/news/308550.html

相关文章:

  • Centos中安装Docker及Docker的使用
  • 亿道推出重磅加固平板!为行业发展注入新动力
  • Gemma谷歌(google)开源大模型微调实战(fintune gemma-2b)
  • MySQL:数据库中有哪些锁
  • MWC 2024丨美格智能发布全新5G-A模组及FWA解决方案,将5.5G带入现实
  • Opencv双目校正函数 stereoRectify 详解
  • 实现前端开发几个常用技巧
  • Vue3 在SCSS中使用v-bind
  • 玩转地下管网三维建模:MagicPipe3D系统
  • 11.以太网交换机工作原理
  • 【通信基础知识】完整通信系统的流程图及各模块功能详解
  • k8s-项目测试环境部署
  • 【Elasticsearch管理】缓存机制
  • JS api基础初学
  • uniapp实战:父子组件传参之子组件数量动态变化
  • Ubuntu绑定USB接口到固定端口
  • 解决gogs勾选“使用选定的文件和模板初始化仓库”报错500,gogs邮件发送失败,gogs邮件配置不生效,gogs自定义模板等问题
  • 数字后端——DEF文件格式
  • 【可做课设、附完整技术文档】流式、异步、实时的Django聊天室!(需进一步定制可联系本人)
  • 网络编程:基于TCP和UDP的服务器、客户端
  • kubectl 命令行管理K8S(上)
  • Redis 之四:Redis 事务和乐观锁
  • C# WPF编程-创建项目
  • 密码学及其应用(应用篇15)——0/1背包问题
  • 基于springboot+vue的实验室管理系统(前后端分离)
  • 华为OD技术面试案例5-2024年
  • 【QT+QGIS跨平台编译】之五十五:【QGIS_CORE跨平台编译】—【qgsmeshcalcparser.cpp生成】
  • Unity(第二十部)效果 粒子、线条和拖尾
  • 全量知识系统问题及SmartChat给出的答复 之6 三套工具之1
  • [RoarCTF 2019]Easy Calc