mybatis plus 自定义 SQL 模糊查询区分大小写
时间: 2024-11-11 08:14:41 浏览: 59
MyBatis Plus是一个基于MyBatis的ORM框架增强工具,它提供了一些便利的功能,包括简化SQL编写、支持自定义SQL等。对于自定义SQL的模糊查询,如果需要区分大小写,通常需要你在编写动态SQL的时候明确指定`lower`或`upper`函数来进行转换。
例如,如果你有一个字段名为`name`,你想进行区分大小写的模糊查询,可以这样做:
```sql
SELECT * FROM table_name WHERE name LIKE concat('%', #{keyword}, '%') ESCAPE '\' AND lower(name) LIKE lower(#{keyword})
```
这里使用了`lower`函数将查询的关键字和数据库中的`name`字段都转换为小写再做匹配,从而实现区分大小写的模糊查询。记得替换`table_name`为你实际的表名,`#{keyword}`为传入的搜索关键字。
如果你想要在查询时关闭自动的大小写转换,可以在创建QueryWrapper对象时设置`queryWrapper.setCaseSensitive(true)`,但这可能会导致不符合预期的结果,除非你的业务需求明确要求如此。
相关问题
Mybatis-plus不区分大小写
Mybatis-plus默认是区分大小写的,但是可以通过设置相关配置来实现不区分大小写的查询。
1. 在Mybatis-plus的配置文件中,添加如下配置:
```xml
<configuration>
<!-- 开启驼峰命名 -->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 自定义SQL注入器 -->
<global-config>
<sqlInjector type="com.baomidou.mybatisplus.core.injector.methods.LogicSqlInjector">
<property name="sqlParser" ref="mybatis-plus-sql-parser"/>
</sqlInjector>
</global-config>
<!-- 自定义SQL解析器 -->
<bean id="mybatis-plus-sql-parser" class="com.baomidou.mybatisplus.extension.parsers.JsqlParserCountOptimize">
<constructor-arg value="mysql"/>
</bean>
</configuration>
```
2. 在使用Mybatis-plus的Mapper时,使用Wrapper的LambdaQueryWrapper构造方法,并使用函数lower或upper将查询条件转为小写或大写,例如:
```java
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getUsername, "admin").or().eq(User::getUsername, "ADMIN");
```
可以修改为:
```java
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getUsername, "admin")
.or(wrapper -> wrapper.eq(User::getUsername, "ADMIN").or().eq(User::getUsername, "admin").or().eq(User::getUsername, "Admin"));
```
其中,通过函数lower将查询条件转为小写,再与小写的"admin"进行比较,这样就可以实现不区分大小写的查询。
mybatis-plus代码不区分大小写怎么配置
### 配置 MyBatis-Plus 实现不区分大小写的 SQL 查询
为了使 MyBatis-Plus 支持不区分大小写的 SQL 查询,可以通过多种方式来实现。一种常见方法是在数据库层面设置字段的字符集和校对规则,另一种则是通过应用程序逻辑处理。
#### 数据库层面上调整字符集和校对规则
对于 MySQL 数据库来说,可以修改表结构或列定义中的字符集以及对应的校对规则(collation),使其支持不区分大小写比较。例如:
```sql
ALTER TABLE table_name MODIFY column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```
这条命令会把 `table_name` 表里的 `column_name` 字段改为使用 UTF-8 编码并采用通用无敏感度排序规则[^1]。
#### 应用程序内部解决方案
如果不想更改现有数据库模式,则可以在应用端采取措施。MyBatis-Plus 提供了一些灵活的方式来定制化查询行为,比如利用 Wrapper 来构建动态条件表达式时加入函数调用来忽略大小写差异。
以下是 Java 代码片段展示如何创建一个不考虑字母大小写的查询条件:
```java
// 创建 QueryWrapper 对象用于封装查询参数
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("LOWER(username)", user.getUsername().toLowerCase());
List<User> users = userService.list(queryWrapper);
```
这里假设有一个名为 username 的字符串类型的属性,并且希望对其进行不区分大小写的匹配检索。上述例子中先将输入值转换成全小写字母形式再与目标记录对比;与此同时,在 SQL 片段里也加入了相应的 lower() 函数确保双方都处于相同的状态下进行比较[^3]。
另外还可以自定义 Mapper 接口的方法签名加上 @Select 注解指定特定的手动编写的 SQL 文本,其中同样能够运用到诸如 UPPER(), LOWER() 这样的标准 SQL 函数达到同样的效果[^5]。
阅读全文
相关推荐
















