Mybatis如何使用正则模糊匹配多个数据
目录
- 使用正则模糊匹配多个数据
- 背景
- mybaits正则匹配
- Mybatis多字段模糊匹配同一个值
- CityDAO
- XML
使用正则模糊匹配多个数据
背景
有这样一个需求,需要模糊匹配一个List的所有元素,如果采用LIKE则需要写很多个语句,这时候其实可以采用正则匹配
mybaits正则匹配
Mysql模糊匹配姓名为a、b、c的所有学生
select * from table where name REGEXP 'a|b|c'
那么用mybatis怎么写呢?我们第一时间可能会这样写:
select *from studentwhere name REGEXP#{item}
但这样是错误的,因为翻译成sql,语句是
select * from student where name REGEXP ' ? | ? | ? '
不能在SQL语句中使用占位符?
正确的SQL应该是以下两种:
select * from student where name REGEXP ?
select * from student where name REGEXP CONCAT_WS('|',?,?,?)
对于前一个来说,占位符的数据应该在Java代码中拼接完成;对于后面一个,CONCAT_WS的参数应该在foreach标签中完成
select *from studentwhere name REGEXP CONCAT_WS('|',#{item} )
Mybatis多字段模糊匹配同一个值
CityDAO
List
XML
使用concat将多个字段拼接之后在进行模糊查询,相比第一种更推荐第二种,执行效率更好
SELECT id,pid as pIDDD,city_name,type FROM cityWHERE 1=1AND pid LIKE concat('%',#{keyWord},'%')OR city_name LIKE concat('%',#{keyWord},'%')OR type LIKE concat('%',#{keyWord},'%') SELECT id,pid as pIDDD,city_name,type FROM cityWHERE 1=1AND CONCAT(IFNULL(pid,''),IFNULL(city_name,''),IFNULL(type,'')) LIKE concat('%',#{keyWord},'%')
特别提醒:由于CONCAT中只要有一个为NULL,则会返回NULL,这将导致你查不到正确数据。为了确保不为NULL,使用 IFNULL判断下就可以了
IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。
【Mybatis如何使用正则模糊匹配多个数据】以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- SpringBoot整合Mybatis|SpringBoot整合Mybatis LocalDateTime 映射失效的解决
- 如何构建可重复读取inputStream的request
- SpringBoot如何接收Post请求Body里面的参数
- formik-yup书写React表单验证
- typora|typora 使用Markdown语法编辑文本
- radiance皮肤在java的使用_TwelveMonkeys|radiance皮肤在java的使用_TwelveMonkeys ImageIO: Java ImageIO的一个插件和扩展集合
- 出版|如何在nature上发表文章
- 使用|使用 Rancher 进行首次金丝雀部署
- JavaScript中splice的使用方法详解
- 如何通过学生邮箱(教育邮箱)申请Jetbrains系列软件无限期试用