<iBatis> iterate元素使用方法详解=

→阿童沐

<iterate
property=""

/*可选,

从传入的参数集合中使用属性名去获取值,

这个必须是一个List类型,

否则会出现OutofRangeException,

通常是参数使用java.util.Map时才使用,

如果传入的参数本身是一个java.util.List, 不能只用这个属性.

不知道为啥官网: http://ibatis.apache.org/docs/dotnet/datamapper/ch03s09.html#id386679

说这个属性是必须的, 但是测试的时候是可以不设置这个属性的, 还望那位大虾知道, 讲解一下.

*/

conjunction=""

/*可选, iterate可以看作是一个循环,

这个属性指定每一次循环结束后添加的符号,

比如使每次循环是OR的, 则设置这个属性为OR*/

open="" /可选, 循环的开始符号/

close="" /可选, 循环的结束符号/

prepend="" /可选, 加在open指定的符号之前的符号/

delete FROM STUDYBOOK WHERE ID IN

#bookList[]#

注意要property的错误

Caused by: com.ibatis.common.beans.ProbeException: Error getting ordinal list from JavaBean. Cause java.lang.StringIndexOutOfBoundsException: String index out of range: -1

//另外:如果parameterClass="java.util.List"类型不匹配的话

报错Caused by: java.sql.SQLException: Invalid parameter object type. Expected ‘java.util.Map’ but found ‘java.util.ArrayList’.

update users set user_name=#userInfo.user_name# where user_id in

#list[]#

注意:不要property属性的错误

Cause: com.ibatis.sqlmap.client.SqlMapException: ParameterObject or property was not a Collection, Array or Iterator.

SELECT * FROM USERS WHERE USER_ID IN

#ids[]#

注意:不要property属性,否则报错。String index out of range: -1

    2. 但是,若参数有多个传入, 一个是List,另一个不是, parameterClass为map时,需要property属性区分要遍历的  集合。

insert all

into users(user_id,user_name,password,address,telephone,email,create_date)

values(#list[].user_id#,#list[].user_name#,#list[].password#,

#list[].address#,#list[].telephone#,#list[].email#,#list[].create_date#)

select * from dual

总结一下:就是如果元素中含有parameterClass属性,并且该属性为map或是bean类型的时候,则在元素中需要使用property属性,来指定在parameterClass所指对象中的某个属性(bean)或键(map);

如果不是map或bean时,例如是list类型的parameterClass的时候,则不需要property属性,在可以直接使用这个list类型作为参数,并且参数"##“中可以为任何标识符,而不一定是value,但是在结尾一定要加上”[]"

测试上边的配置SQL语句。

//删除书籍的信息

public int deleteStudyBook(List bookList) {

try {

return this.client.delete(“delStudybook”,bookList);

} catch (SQLException e) {

e.printStackTrace();

return 0;

}

}

//修改用户的信息

public int updateUsers(Map<String,Object> map){

try {

return this.client.delete(“updateUsersIterate”,map);

} catch (SQLException e) {

e.printStackTrace();

return 0;

}

}

//使用Iterate实现批量插入数据

public void barkInsert(List list){

try {

this.client.insert(“BarkInsertUsers”,list);

} catch (SQLException e) {

e.printStackTrace();

}

}

=========================

//测试iterate实现类似in的功能查询

public void queryByIterate(List ids){

try {

List list=this.client.queryForList(“selectByIterate”,ids);

for (Users user : list) {

System.out.println(“user====I”+user.toString());

}

} catch (Exception e) {

e.printStackTrace();

}

}

Test测试类中的测试过程

//测试的删除

List list=new ArrayList();

list.add(1);

list.add(2);

//删除书籍

dao.deleteStudyBook(list);

//测试修改用户信息

Map<String,Object> map=new HashMap<String,Object>();

//设置修改的字段

Users user=new Users();

user.setUser_name(“aaaaaaaaaaaaaaaaa”);

List list1=new ArrayList();

list1.add(1);

list1.add(2);

map.put(“userInfo”,user);

map.put(“list”,list1);

dao.updateUsers(map);


//测试查询的方法

List list=new ArrayList();

list.add(1);

list.add(2);

dao.queryByIterate(list);


//测试批量插入记录

List userList=new ArrayList();

//方式一:不适用自动增长列(id设置值:#list[].user_id#)

Users user1=new Users(10,“bbbb”,“bbbb”,“bbbb”,“bbbb”,“bbbb”,“bbbb”);

Users user2=new Users(11,“cccc”,“cccc”,“cccc”,“cccc”,“cccc”,“cccc”);

dao.barkInsert(userList);

转自:http://hongzhguan.iteye.com/blog/1222353

分类: iBATIS
好文要顶 关注我 收藏该文
阿童沐
关注 - 11
粉丝 - 7
+加关注
0 0
« 上一篇: apache + svn 搭建版本控制-
» 下一篇:Ant详解-
posted on 2012-06-05 12:15 阿童沐 阅读(1399) 评论(0) 编辑 收藏

刷新评论刷新页面返回顶部
(评论功能已被禁用)
【推荐】超50万VC++源码: 大型组态工控、电力仿真CAD与GIS源码库!
【活动】申请成为华为云云享专家 尊享9大权益
【工具】SpreadJS纯前端表格控件,可嵌入应用开发的在线Excel
【腾讯云】拼团福利,AMD云服务器8元/月
qcloud
相关博文:
· ibatis实现Iterate的使用
· ibatis iterate 使用 批量插入
· ibatis 循环迭代
· mybatis_SQL映射(2)
· com.ibatis.sqlmap.client.SqlMapException: There is already a statement named search in this SqlMap.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值