SQL语句
先要知道如何进行模糊查询,在原有的基础上进行修改,一般都在mysql上写好SQL语句,再换至mybatis里拼写
模糊查询如下:
SELECT * FROM `order` WHERE `id` LIKE CONCAT('%','Check','%');
表:order
字段:id
CONCAT作用:将多个字符串连接成一个字符串
Check:你要匹配的数据
下面在原有基础上加上支持批量(支持多选),如下:
SELECT * FROM `order` WHERE id LIKE CONCAT('%','Check','%') OR id LIKE CONCAT('%','Open','%');
想要再支持更多,则在后面反复添加OR id LIKE CONCAT(’%’,’**’,’%’)
SQL原型基本上出来了,下面也要在mybatis中操作了
前提
数据库字段封装了实体类,是一个字符串类型
private String Id;
这就意味着前端页面带过来的数据就是字符串类型,必须用逗号隔开
比如:String id = “Check,Open”;
因为涉及到批量的问题,mybatis中优先考虑到 foreach
<foreach item="Id" collection="Id" open="(" separator="," close=")">
#{Id}
</foreach>
但是只有有一个问题,就是Id传过来的是字符串类型,不能这样直接迭代,所以又想到了用split(’,’)这个分隔
后续还需要用OR关键字要连接模糊查询,所以总结一下,得出如下代码
结论代码
<if test="Id != null and Id != '' "> AND
<foreach item="IdStr" collection="Id.split(',')" open="(" separator="OR" close=")">
id LIKE CONCAT('%', #{IdStr}, '%')
</foreach>
</if>
我在控制台打印出执行的SQL语句如下:
Preparing:select * from order WHERE deal_result IS NULL and ( id LIKE CONCAT('%', ?, '%') OR id LIKE CONCAT('%', ?, '%') );
Parameters:Check(String), Open(String)
这样就可以进行多选的模糊查询了