mybatis foreach嵌套if标签
代码实现:
Mapper.java文件
List<Map<String, Object>> getYsxmcodeByYszbh(@Param("qyName") List<String> qyName, @Param("yszh") String yszh);
XXX.xml文件
<select id="getYsxmcodeByYszbh" resultType="java.util.Map">
<foreach collection="qyName" index="index" item="qy">
<if test="index != 0">
union
</if>
select ysxmcode from ${qy}_yxsxk.tpc_ysxkz where yszbh=#{yszh,jdbcType=VARCHAR}
</foreach>
</select>
判断是否为第一个循环,是不加union拼接,否则加上
xml文件 $和 #的区别
${}在预编的时候会直接被变量替换,但是存在被注入的问题,表名必须用${},因为#{}在预编的时候会被解析为?占位符,但当被变量替换的时候会加上 ''单引号,表明不允许加单引号(但是反引号``是可以的)
union与union all区别
1.union all是直接连接,取到得是所有值,记录可能有重复;union 是取唯一值,记录没有重复。所以union在进行表链接后会筛选掉重复的记录,union all不会去除重复记录。
2.union将会按照字段的顺序进行排序;union all只是简单的将两个结果合并后就返回。从效率上说,union all 要比union快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用union all。
mybatis if和foreach嵌套 (同一个列,不定个数的查询条件)
有这么一种需求
根据输入的内容的个数设置不同个数的查询条件(在一个列上设置不定个数的查询条件),这时就需要根
据foreach循环在一个列上拼接查询条件了。
模板如下图
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。