MyBatis中动态sql实现传递多个参数并使用if进行参数的判断和实现like模糊搜索以及foreach实现in集合
Posted 公众号:霸道的程序猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis中动态sql实现传递多个参数并使用if进行参数的判断和实现like模糊搜索以及foreach实现in集合相关的知识,希望对你有一定的参考价值。
场景
在mapper接口层方法参数有id的数组和姓名的模糊搜索和类型的三个参数。
现在需要将这三个参数传递在动态sql的xml中接受并进行判断不为空。
然后查询数据库中记录在第一个参数id数组中的并且姓名是模糊搜索的并且类型是直接相等于的。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
mapper层接口写法:
public List<KqKqrysz> selectKqKqryszListBySx(@Param("array")Long[] bmids, String xm, int lx);
xml写法:
<select id="selectKqKqryszListBySx" resultMap="KqKqryszResult"> SELECT j.id, j.xm, j.bm, k.tszt, z.zwgz, s.dict_label AS dklx, k.bcz, k.bc, k.zbbc, k.ddid, k.qysjdk from dp_jbxx j LEFT JOIN kq_kqrysz k on j.gh = k.gh LEFT JOIN dp_zcxx z ON j.gh = z.gh LEFT JOIN kq_dksz d ON j.gh = d.gh LEFT JOIN dp_grxx g ON j.gh = g.gh LEFT JOIN sys_dict_data s on d.dkzt = s.dict_value AND s.dict_type="kq_kqgl_dksz_zt" <where> <if test="array != null"> and j.bmid in <foreach collection="array" item="item" open="(" separator="," close=")"> ${item} </foreach> </if> <if test="xm != null and xm != ‘‘"> and j.xm like concat(‘%‘, #{xm}, ‘%‘) </if> <if test="lx != null and lx!= ‘‘"> and g.ryfl = #{lx}</if> </where> </select>
注意:
上面是一些相关的关联查询。
下面的
<if test="array != null"> and j.bmid in <foreach collection="array" item="item" open="(" separator="," close=")"> ${item} </foreach> </if>
就是实现查询id在参数ids这个数组中的。
注意这里的array要与接口方法中@Param("array")一致。
然后这里传递的参数名字if test发判断中直接使用对应接口方法中的参数名,不用使用#{xm}这种的方式,但是在里面的sql语句中要使用这种方式。
以上是关于MyBatis中动态sql实现传递多个参数并使用if进行参数的判断和实现like模糊搜索以及foreach实现in集合的主要内容,如果未能解决你的问题,请参考以下文章
JavaLearn#(27)MyBatis进阶:Mapper代理(接口绑定)多参数传递模糊查询分页自增主键回填动态SQL一级缓存二级缓存
MyBatis框架—动态代理参数处理处理查询结果like与主键
mybatis深入理解之 # 与 $ 区别以及 sql 预编译