【mysql】Mybatisplus BINARY {0} LIKE CONCAT(‘%‘, {1}, ‘%‘)写这句话是什么意思
这是一个MyBatis-Plus中用于实现区分大小写的模糊查询的SQL片段。让我详细解释:
语法解析
BINARY {0} LIKE CONCAT('%', {1}, '%')
BINARY
:MySQL关键字,强制进行二进制比较,即区分大小写{0}
:字段名的占位符{1}
:查询值的占位符CONCAT('%', {1}, '%')
:拼接成前后模糊匹配的模式
实际使用场景
1. 在XML映射文件中
<select id="selectByKeyword" resultType="YourEntity">SELECT * FROM table_name WHERE BINARY #{column} LIKE CONCAT('%', #{keyword}, '%')
</select>
2. 在MyBatis-Plus条件构造器中
// 使用自定义SQL条件
QueryWrapper<YourEntity> wrapper = new QueryWrapper<>();
wrapper.apply("BINARY column_name LIKE CONCAT('%', {0}, '%')", keyword);// 或者使用Lambda表达式
LambdaQueryWrapper<YourEntity> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.apply("BINARY column_name LIKE CONCAT('%', {0}, '%')", keyword);
与普通LIKE的区别
类型 | SQL示例 | 是否区分大小写 |
---|---|---|
普通LIKE | name LIKE '%admin%' | ❌ 不区分 |
BINARY LIKE | BINARY name LIKE '%admin%' | ✅ 区分 |
示例效果:
数据:
"Admin"
,"admin"
,"ADMIN"
BINARY name LIKE '%admin%'
→ 只匹配"admin"
name LIKE '%admin%'
→ 匹配所有三条记录
适用场景
用户名/邮箱查询:需要精确匹配大小写
验证码查询:验证码通常区分大小写
特定编码查询:如产品编码、订单号等
注意事项
MySQL特有:
BINARY
关键字是MySQL特有的语法性能考虑:BINARY查询可能无法使用普通索引,需要考虑性能影响
跨数据库兼容:如需支持多种数据库,建议使用其他方式实现大小写敏感查询
这种写法在需要精确大小写匹配的模糊查询场景中非常有用。