IBATIS Iterate用法 初探

IBATIS里的iterate标签提供了遍历List 来动态构造SQL。

 

主要写下使用的时候的注意点:

 

在BabyDAOImpl类里面些这么一个方法

 

	/**
	 * 测试iterator
	 */
	public List<BabyDO> queryByIds(Map idsMap) throws SQLException {
		return client.queryForList("queryByIds", idsMap);
	}

 

配置的sqlMap如下:

 

	<select id="queryByIds" resultMap="baby-Result" parameterClass="java.util.Map">
		select * from Baby where id in (
		<!-- iterate标签的property属性是parameterClass里面去找一个属性,这个属性实现了Iterable接口 -->
		<iterate property="idsList" conjunction=",">
			#idsList[]#
		</iterate>
		)
	</select>

 这里有两个注意点:

第一点:

注意这里我们一般用 #传入的参数名称[]#  。而不太用$idsList[]$。

这个#和 $ 的区别是:

#  使用的是PreparedStatement 机制,生成的SQL字符串中含有很多?,这些?会被动态的添加参数进去查询

$  中的变量好比字符串直接替换。

 

第二点:

<iterate property  ……

这个property标签的指应该是 parameterClass里面去找一个属性,这个属性实现了Iterable接口。

如果本是传的就是 一个list,并且就是这个里面需要遍历的,那么不需要 指定property,否则会报错说ArrayList里找不到你说的这个property属性。(上例我传了一个Map进来,在Map里我放了一个idsList这么一个list。所以需要加上property属性)

 

 

=================================邪恶的分割线 ==============================

 

另外一种情况,如果传进来的是个List<BabyDO>,那么代码应该如下:

BabyDAOImpl

/**
	 * 测试iterator
	 */
	public List<BabyDO> queryByIds(List<BabyDO> babys) throws SQLException {
		return client.queryForList("queryByIds", babys);
	}
 

SQLMap :

 

	<select id="queryByIds" resultMap="baby-Result" parameterClass="java.util.ArrayList">
		select * from Baby where id in (
		<!-- iterate标签的property属性是parameterClass里面去找一个属性,这个属性实现了Iterable接口 -->
		<iterate conjunction=",">
			#babys[].id#
		</iterate>
		)
	</select>

 

这里的注意点:


第一点:

本身传的就是一个ArrayList,所以不需要设置property。


第二点:

我要的是BabyDO当中的id作为遍历条件。所以需要加上“.id”。

 

 

 

 

 

 

 

你可能感兴趣的:(sql,ibatis)