IBATIS Iterate用法 初探



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

 

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

 

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

 

Java代码 复制代码  收藏代码
  1. /** 
  2.  * 测试iterator 
  3.  */  
  4. public List<BabyDO> queryByIds(Map idsMap) throws SQLException {  
  5.     return client.queryForList("queryByIds", idsMap);  
  6. }  
	/**
	 * 测试iterator
	 */
	public List<BabyDO> queryByIds(Map idsMap) throws SQLException {
		return client.queryForList("queryByIds", idsMap);
	}

 

配置的sqlMap如下:

 

Xml代码 复制代码  收藏代码
  1. <select id="queryByIds" resultMap="baby-Result" parameterClass="java.util.Map">  
  2.     select * from Baby where id in (  
  3.     <!-- iterate标签的property属性是parameterClass里面去找一个属性,这个属性实现了Iterable接口 -->  
  4.     <iterate property="idsList" conjunction=",">  
  5.         #idsList[]#  
  6.     </iterate>  
  7.     )  
  8. </select>  

 这里有两个注意点:

第一点:

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

这个#和 $ 的区别是:

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

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

 

第二点:

<iterate property  ……

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

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

 

 

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

 

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

BabyDAOImpl

Java代码 复制代码  收藏代码
  1. /** 
  2.      * 测试iterator 
  3.      */  
  4.     public List<BabyDO> queryByIds(List<BabyDO> babys) throws SQLException {  
  5.         return client.queryForList("queryByIds", babys);  
  6.     }  
/**
	 * 测试iterator
	 */
	public List<BabyDO> queryByIds(List<BabyDO> babys) throws SQLException {
		return client.queryForList("queryByIds", babys);
	}
 

SQLMap :

 

Xml代码 复制代码  收藏代码
  1. <select id="queryByIds" resultMap="baby-Result" parameterClass="java.util.ArrayList">  
  2.     select * from Baby where id in (  
  3.     <!-- iterate标签的property属性是parameterClass里面去找一个属性,这个属性实现了Iterable接口 -->  
  4.     <iterate conjunction=",">  
  5.         #babys[].id#  
  6.     </iterate>  
  7.     )  
  8. </select>  

 

这里的注意点:


第一点:

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


第二点:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值