单条参数模糊查询与多参数批量模糊查询

本文介绍了如何在SQL查询中处理多参数的模糊查询,通过比较精确查询的批量IN和foreach方法,提出了一种动态生成SQL的方式,将LIKE操作与foreach结合,以提高查询效率,避免多次访问数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模糊查询:即根据给定的部分单词短语作为参数匹配到符合要求的内容,例如给定单词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编译不报错。

如此即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值