目录
官网地址: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 查询条件。以下是一些常用的方法:
eq()
:用于添加等于条件,接受一个字段名和值作为参数。ne()
:用于添加不等于条件,接受一个字段名和值作为参数。gt()
:用于添加大于条件,接受一个字段名和值作为参数。lt()
:用于添加小于条件,接受一个字段名和值作为参数。ge()
:用于添加大于等于条件,接受一个字段名和值作为参数。le()
:用于添加小于等于条件,接受一个字段名和值作为参数。between()
:用于添加范围条件,接受一个字段名、最小值和最大值作为参数。in()
:用于添加多个值的条件,接受一个字段名和一个值列表作为参数。like()
:用于添加模糊匹配条件,接受一个字段名和一个模式作为参数。notIn()
:用于添加不在多个值列表中的条件,接受一个字段名和一个值列表作为参数。
这些方法可以组合使用,以构建复杂的动态 SQL 查询条件。例如,你可以使用多个 eq()
方法来添加多个等于条件,或者使用 and()
方法来组合多个条件。
三、注意事项
在使用 QueryWrapper
类的方法构建动态 SQL 查询条件时,需要注意以下几点:
字段名:传递给
QueryWrapper
类的方法的字段名必须是数据库表中的实际字段名。如果字段名不正确,将无法正确构建查询条件。参数类型:传递给
QueryWrapper
类的方法的参数类型必须与数据库表中的字段类型相匹配。如果参数类型不正确,将无法正确构建查询条件。条件组合:可以使用
and()
方法或or()
方法来组合多个条件。如果需要添加多个条件,可以使用QueryWrapper
类的all()
方法来添加多个条件。参数传递:如果传递的参数是复杂对象,需要确保该对象的属性名与数据库表中的字段名相匹配。如果参数是列表或集合,需要确保传递的参数类型与数据库表中的字段类型相匹配。
数据库方言:MyBatis-Plus 支持多种数据库方言,不同的数据库方言可能对 SQL 语法有不同的要求。因此,在使用
QueryWrapper
类的方法构建动态 SQL 查询条件时,需要根据所使用的数据库方言进行调整。
总之,在使用 QueryWrapper
类的方法构建动态 SQL 查询条件时,需要注意字段名、参数类型、条件组合、参数传递和数据库方言等问题,以确保正确构建查询条件。
如何确保传递给`QueryWrapper`类的方法的参数是有效的?
在使用 QueryWrapper
类的方法构建动态 SQL 查询条件时,为了确保传递给 QueryWrapper
类的方法的参数是有效的,可以采取以下几个步骤:
验证参数类型:传递给
QueryWrapper
类的方法的参数类型必须与数据库表中的字段类型相匹配。如果参数类型不正确,将无法正确构建查询条件。因此,在传递参数之前,需要确保参数类型是正确的。验证参数值:传递给
QueryWrapper
类的方法的参数值必须是有效的。如果参数值无效,将无法正确构建查询条件。因此,在传递参数之前,需要确保参数值是有效的。处理空值:如果传递给
QueryWrapper
类的方法的参数值为空,需要根据具体情况进行处理。例如,如果要添加等于条件,传递的参数值为空,可以使用isNotNull()
方法来添加不为空的条件。处理复杂对象:如果传递的参数是复杂对象,需要确保该对象的属性名与数据库表中的字段名相匹配。如果参数是列表或集合,需要确保传递的参数类型与数据库表中的字段类型相匹配。
处理日期类型:如果传递的参数是日期类型,需要确保参数值的格式与数据库表中的字段类型相匹配。不同的数据库可能对日期类型的格式有不同的要求。
处理字符串类型:如果传递的参数是字符串类型,需要确保参数值的格式与数据库表中的字段类型相匹配。不同的数据库可能对字符串类型的格式有不同的要求。
参考