Mybatis一个搜索框对多个字段模糊查询

本文介绍了在MyBatis中实现模糊查询的两种方法:使用LIKE运算符结合bind标签进行字符串拼接,以及使用MySQL的INSTR和CONCAT_WS函数进行高效搜索。这两种方法能够帮助开发者在不同数据库环境下实现灵活且高效的模糊匹配。

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

方式一:

使用like运算符

LIKE运算符用于WHERE表达式中,通常与 % 一同使用,类似于一个元字符的搜索(模糊匹配)

使用mybatis<bind />标签

 规避更换数据库有些SQL语句可能需要重写,不同数据库之间存在语法差异,比如Oracle中 CONCAT() 只支持两个参数

使用mysql函数 CONCAT_WS(x, s1,s2...sn)

CONCAT With Separator,同 CONCAT(s1,s2...sn) 函数,但是每个字符串之间要加上 x,x 可以是分隔符。CONCAT() 如有任何一个参数为NULL,则返回值为 NULL,CONCAT_WS() 则不会返回

  <select id="queryPageList" resultMap="BaseResultMap">
    select *
    from sys_user
    <where>
    	del_flag = '0'
      <if test="keyword != null and keyword != ''">
        <!-- bind标签的两个属性都是必选项,name为绑定到上下文的变量名,value为OGNL表达式 -->
        <bind name="temp" value="'%' + keyword + '%'"/>
    	and CONCAT_WS("-", telephone, mail) like #{temp}
      </if>
    </where>
  </select>

 

方式二:

使用mysql函数 INSTR(str, substr)

INSTR(str, substr) 在指定的字符串(str)中,搜索指定的字符(substr),返回发现指定的字符的位置; 
str 被搜索的字符串 
substr 希望搜索的字符

使用mysql函数 CONCAT_WS(x, s1,s2...sn)

  <select id="queryPageList" resultMap="BaseResultMap">
    select *
    from sys_user
    <where>
    	del_flag = '0'
      <if test="keyword != null and keyword != ''">
    	and INSTR(CONCAT_WS("-", telephone, mail), #{keyword}) > 0
      </if>
    </where>
  </select>

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值