模糊查询:即根据给定的部分单词短语作为参数匹配到符合要求的内容,例如给定单词aa作为参数,可以匹配到aabbc,baac,bcaa等,但匹配不到abca和abcd等。
常用的模糊查询的sql(以表t_example,匹配字段name为例):
select * from t_example where name like CONCAT('%',#{param},'%')
但是这条sql只允许通过一条参数查询,如果遇到多参数的情景就需要多次重复访问数据库,效率低下。一下阐述如何通过多条参数一次性访问数据库做批量模糊查询:
首先对比与精确查询的批量in与foreach,一般sql为:
select * from t_example where name in
<foreach collection='param' open='(', close=',' sperater=',' itemp='param'>
#{param}
</foreach>
通过动态sql做批量,即将XML中的内容在底层再批结,组成新的sql
其中 open为起始符,close为结束符,separater为分隔符,collection为传递的参数名,temp为形参名。
sql重组后为:
select * from t_example where name in (param1,param2,param3,...)
而做批量模糊查询希望得到的sql是
select * from t_example where name like param1 or name like param2 or ...
那么需要做拼接的部分就是like之后,所以like之后都要添加到foreach中
批量模糊查询的sql为
select * from t_example where name like 1!=1
<foreach collection='param' iteam='param'>
or name like CONCAT('%',#{param},'%')
</foreach>
1!=1 为了拼接foreach中的第一个or编译不报错。
如此即可