mybatics中 foreach添加空格,数据库使用正则表达式模糊查询没有结果

mybatics 查询数据问题

不想看可以跳到最后解决方法去除foreach添加空格问题

通过条件查询数据,有时必须使用模糊查询。大多数情况下使用如下代码进行拼接
例:

  	    <if test="searchCond.contents != null">
			AND n.contents LIKE '%${searchCond.contents}%'
		</if>

但是 当需要多次拼接查询的时候拼接起来会很复杂
例:

<if test="searchCond.assignUserVal != null and searchCond.assignUserVal.size > 0">
				AND (
					<foreach collection='searchCond.assignUserVal' item='item' index='index'>
						<if test = "index != 0" >
						 	OR
						</if>
						f_is_overlap(detail.act_user, &apos;${item}&apos;)
					</foreach>
				)
</if> 

而使用正则进行模糊查询比较方便
例(使用的是postgre数据库进行查询):

WHERE detail.act_user ~ 'test|notest'

上面代码我写到mybatics里运行却查不到任何内容
例:

<if test="searchCond.assignUserVal != null and searchCond.assignUserVal.size > 0">
				AND detail.act_user ~
				<foreach collection='searchCond.assignUserVal' item='item' index='index' open='&apos;' separator='|' close='&apos;'>
					${item}
				</foreach>
</if>

经过找大佬的排查发现上面的例子mybatics拼接的时候会自动加上空格变成下面的样子

AND detail.act_user ~ '  test  |  test2 '

仔细看test前后会有空格所以导致查不到结果

解决方法1:
加上replace去除空格
例:

AND detail.act_user ~ replace (' test | test2 ', ' ', '')   //弊端会把所有空格去掉

mybatics中代码

<if test="searchCond.assignUserVal != null and searchCond.assignUserVal.size > 0">
				AND detail.act_user ~ replace (
				<foreach collection='searchCond.assignUserVal' item='item' index='index' open='&apos;' separator='|' close='&apos;'>
					${item}
				</foreach>
				, ' ', '') 
</if>

依然运行不出结果但是我把mybatics拼接的代码拿出来单独运行是有结果的
如果有大佬能帮我解决这个问题感激不尽

解决方法2:
直接上代码

<if test="searchCond.assignUserVal != null and searchCond.assignUserVal.size > 0">
				AND detail.act_user ~
				<foreach collection='searchCond.assignUserVal' item='item' index='index' open='&apos;' separator='|' close='&apos;'>${item}</foreach>
</if>

很无语把 ${item}前后换行符去了就可以

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值