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)