query wrapper 正则表达式
时间: 2025-05-19 11:21:30 浏览: 10
### 使用 Query Wrapper 结合正则表达式进行查询
在 MyBatis-Plus 中,QueryWrapper 提供了一种灵活的方式来构建动态 SQL 查询条件。如果需要结合正则表达式来匹配特定的数据模式,则可以通过 `like` 方法或者自定义 SQL 来实现。
以下是基于提供的引用内容以及专业知识的回答:
#### 1. 利用 QueryWrapper 和 LIKE 实现模糊匹配
虽然 MyBatis-Plus 并未直接支持原生的正则表达式语法,但可以利用数据库中的 `LIKE` 关键字模拟简单的正则表达式行为。例如,在查找包含指定子串的角色信息时,可以这样写:
```java
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.mapper.RolesInfoMapper;
import com.example.model.TRolesInfo;
public class RolesInfoService {
private final RolesInfoMapper rolesInfoMapper;
public List<TRolesInfo> findRoleBulkByRegex(String pattern) {
QueryWrapper<TRolesInfo> queryWrapper = new QueryWrapper<>();
// 构建逗号分隔的形式以精确匹配角色编号
String formattedPattern = "," + pattern.replaceAll(",", ",") + ",";
queryWrapper.like("concat(',', role_bulk, ',')", formattedPattern);
return rolesInfoMapper.selectList(queryWrapper);
}
}
```
上述代码中,通过将 `role_bulk` 字段转换为 `,1,2,3,...,n,` 的形式[^1],并将其与输入参数拼接后的字符串进行比较,从而实现了精确匹配的需求。
#### 2. 自定义 SQL 支持复杂正则表达式逻辑
对于更复杂的场景(如排除某些特殊组合),可以直接编写自定义 SQL 调用数据库内置函数完成高级过滤操作。例如 MySQL 数据库提供了强大的 REGEXP 功能,允许开发者定义任意复杂的匹配规则。
下面展示了一个例子,演示如何扩展 MyBatis-Plus 的方法来自定义 SQL 查询语句:
```java
@Select("SELECT * FROM t_roles_info WHERE concat(',', role_bulk, ',') REGEXP CONCAT(',(', #{pattern}, '),')")
List<TRolesInfo> selectByRegexp(@Param("pattern") String pattern);
```
调用此接口时只需传递期望匹配的目标集合即可自动组装成合适的正则表达式[^1]。
#### 3. 测试验证功能有效性
为了确保新增的功能能够正常工作,应当设计单元测试覆盖各种边界情况。以下是一个完整的 JUnit 示例说明如何检验我们的解决方案是否满足预期效果:
```java
@SpringBootTest
class RolesInfoServiceTest {
@Autowired
private RolesInfoService rolesInfoService;
@Test
void testFindRoleBulkByRegex() {
// 准备测试数据
TRolesInfo info1 = new TRolesInfo();
info1.setRoleBulk("1,2,3");
TRolesInfo info2 = new TRolesInfo();
info2.setRoleBulk("4,5");
// 假设已保存到数据库...
// 验证结果集
List<TRolesInfo> result = rolesInfoService.findRoleBulkByRegex("1,2");
assertNotNull(result);
assertEquals(1, result.size());
assertTrue(result.stream().anyMatch(r -> r.getRoleBulk().equals("1,2,3")));
}
}
```
以上展示了如何集成 QueryWrapper 及其变体解决实际业务问题的同时保持良好的可维护性和性能表现[^2]。
---
阅读全文
相关推荐





