mybatis-plus in查询忽略大小写怎么做
时间: 2024-10-22 12:25:34 浏览: 123
查询插件,支持模糊查询,忽略大小写,多个关键字
MyBatis-Plus是一个基于MyBatis的简化整合工具,它提供了一些便捷的功能,包括对SQL的自动处理。如果你想要在IN查询中忽略大小写,你可以利用其提供的动态SQL特性。
首先,你需要创建一个包含大小写不敏感比较条件的自定义拦截器或者全局通用Mapper方法。例如,可以创建一个`CaseInsensitiveInInterceptor`:
```java
public class CaseInsensitiveInInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
ParameterMetaData parameter = invocation.getArgs()[0];
if (parameter != null && parameter.getProperty() != null) {
String columnName = parameter.getProperty().getName();
// 这里使用String的toLowerCase()方法将值转换为小写
String sql = ((SqlSession sqlSession) invocation.getArgs()[1]).getMapper().buildSqlWithoutParameterMarker(columnName);
// 将查询中的所有值也转为小写
List<Object> values = new ArrayList<>(invocation.getArgs()[2].size());
for (Object value : invocation.getArgs()[2]) {
values.add(value.toString().toLowerCase());
}
Object result = sqlSession.selectList(sql, values.toArray());
return result;
}
return invocation.proceed();
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties) {
}
}
```
然后,在配置文件中启用这个拦截器:
```xml
<plugins>
<plugin interceptor="com.example.CaseInsensitiveInInterceptor"/>
</plugins>
```
最后,你在Mapper接口的方法上使用`@GlobalConfig`注解,标记该方法需要应用这个拦截器:
```java
@GlobalConfig(casesensitiveInStatement = false)
List<User> findByPropertyNotIgnoreCase(@Param("property") String property, @Param("values") Collection<String> values);
```
这样,在`findByPropertyNotIgnoreCase`方法的IN查询中,MyBatis-Plus会自动忽略大小写地匹配值。
阅读全文