MyBatis-Plus 条件构造器的使用(左匹配查询)
在上一篇文章中,我们已经介绍了 MyBatis-Plus 条件构造器,包括 QueryWrapper
和 UpdateWrapper
的基本使用方法、常见查询条件(如等于、不等于、大于、小于)以及如何使用 Lambda 表达式来构建动态查询和更新条件。
在本文中,我们将进一步扩展 MyBatis-Plus 条件构造器 的使用,增加 左匹配查询(like
查询的变体)功能,帮助开发者更好地构建复杂的查询条件。
1. 左匹配查询(likeLeft
)
在 SQL 中,左匹配查询(也称为 前缀模糊查询)通常用于查找以某个特定字符或子字符串开始的记录。例如,查找所有名字以 “J” 开头的用户。
在 MyBatis-Plus 中,QueryWrapper
提供了 likeLeft
方法来实现左匹配查询。它通过在 like
查询的模式中加上 %
来实现前缀匹配。
1.1 likeLeft
的作用
-
likeLeft
方法在查询条件中拼接%
,使得查询变成“以指定值开头”的模糊匹配。例如,查询所有以 “John” 开头的名字:
"John%"
。
1.2 使用 likeLeft
进行左匹配查询
示例:使用 likeLeft
进行左匹配查询
假设有一个用户表 User
,包含字段 name
和 age
,我们希望查询所有名字以 John
开头的用户。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.likeLeft("name", "John"); // 查询名字以 "John" 开头的用户
List<User> users = userMapper.selectList(queryWrapper);
在这个例子中:
-
likeLeft("name", "John")
:生成的 SQL 查询将是:SELECT * FROM user WHERE name LIKE 'John%';
这将返回所有名字以 “John” 开头的用户。
2. 使用 QueryWrapper
和 LambdaQueryWrapper
构建复杂查询
2.1 结合其他查询条件进行组合
likeLeft
可以与其他查询条件结合使用,构建更复杂的查询。例如,查询所有年龄大于 20 且名字以 “John” 开头的用户。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 20) // 查询年龄大于 20
.likeLeft("name", "John"); // 查询名字以 "John" 开头
List<User> users = userMapper.selectList(queryWrapper);
在这个例子中:
gt("age", 20)
:查询年龄大于 20 的用户。likeLeft("name", "John")
:查询名字以 “John” 开头的用户。
生成的 SQL 会是:
SELECT * FROM user WHERE age > 20 AND name LIKE 'John%';
2.2 使用 LambdaQueryWrapper
进行左匹配查询
与 QueryWrapper
类似,LambdaQueryWrapper
也支持 左匹配查询,并且通过 Lambda 表达式 来构建查询条件,提供了更好的类型安全。
示例:使用 LambdaQueryWrapper
进行左匹配查询
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.likeLeft(User::getName, "John"); // 查询名字以 "John" 开头的用户
List<User> users = userMapper.selectList(queryWrapper);
在这个例子中:
likeLeft(User::getName, "John")
:通过 Lambda 表达式引用字段,构建前缀模糊查询,查询名字以 “John” 开头的用户。
注意:
LambdaQueryWrapper
提供了更加安全和易读的方式来构建查询条件,它可以避免直接拼接字符串时发生的字段拼写错误。
3. 其他常见查询条件的结合
3.1 使用 likeLeft
和 likeRight
结合
除了 likeLeft
,MyBatis-Plus 还提供了 likeRight
方法用于 右匹配查询(后缀模糊查询)。你可以将它们与其他查询条件结合使用,构建更加灵活的查询。
示例:结合 likeLeft
和 likeRight
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.likeLeft("name", "John") // 查询名字以 "John" 开头的用户
.likeRight("email", "gmail.com"); // 查询邮箱以 "gmail.com" 结尾的用户
List<User> users = userMapper.selectList(queryWrapper);
生成的 SQL 查询为:
SELECT * FROM user WHERE name LIKE 'John%' AND email LIKE '%gmail.com';
3.2 结合 likeLeft
和 in
条件
你还可以将 likeLeft
与其他条件,如 in
,结合起来,进行复杂的条件查询。
示例:使用 likeLeft
和 in
条件
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.likeLeft("name", "John") // 查询名字以 "John" 开头的用户
.in("age", 20, 25, 30); // 查询年龄为 20、25 或 30 的用户
List<User> users = userMapper.selectList(queryWrapper);
生成的 SQL 查询为:
SELECT * FROM user WHERE name LIKE 'John%' AND age IN (20, 25, 30);
4. 总结
likeLeft
:用于实现 左匹配查询,即查询以指定字符串开头的数据。QueryWrapper
和LambdaQueryWrapper
:都可以用于构建 左匹配查询,LambdaQueryWrapper
提供了更强的类型安全性。- 多条件组合查询:
likeLeft
可以与其他查询条件(如gt
、lt
、in
等)结合使用,构建更复杂的查询。 - 灵活的 SQL 构建:MyBatis-Plus 的条件构造器允许开发者通过链式调用和 Lambda 表达式来简洁地构建动态 SQL 查询,提升代码可读性和维护性。
通过 likeLeft
等查询条件,开发者可以轻松构建多种查询场景,满足复杂的业务需求。 🚀