业务需求: 一组关键字(广州 | 长沙) + 疫情
这里的查询结果标题中要求带有
1.广州疫情 2.长沙疫情 3.疫情广州 4.疫情长沙
四种组合(也就是排列组合)
方法一:
先在代码中将 "(广州 | 长沙) + 疫情" 分割成 "广州 | 长沙" 和 "疫情" 的List集合
然后使用动态SQL循环正则匹配条件 :
and 字段名称 REGEXP '广州|长沙'
and 字段名称 REGEXP '疫情'
这样就可以可以做到排列组合匹配了
方法二:
先准备一个List<List<String> > 类型的集合 titleList
将 "(广州 | 长沙) + 疫情" 拆分为 "广州", "长沙", "疫情",
只不过 "广州"和"长沙" 放在一个集合里, "疫情"放在另一个集合里
然后使用动态SQL循环
<if test="title != null ">
and
<foreach collection="dto.title" item="item" open="(" separator=" and " close=")">
<foreach collection="item" item="dot" open="(" separator=" or " close=")">
crr.word like concat("%",concat(#{dot},"%"))
</foreach>
</foreach>
</if>
也可以达到方法一的效果