首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

ibatis批量安插数据-iterate标签详解及应用

2012-09-25 
ibatis批量插入数据-iterate标签详解及应用我们都知道mysql支持:?insert into tb_name(col1, col2, col3)

ibatis批量插入数据-iterate标签详解及应用

我们都知道mysql支持:

?

insert into tb_name(col1, col2, col3) values (col1_v, col2_v, col3_v), (col1_v, col2_v, col3_v), ...

?这样批量插入多条数据, 使用场景是, 当初始化某用户的数据库信息时.

比如现在, 我们有一个产品激活才能使用,并且激活才能使用的需求, 同时

当一个用户激活自己的帐户的同时(或者一段时间之后), 可以获得若干个激活码

提供给自己的其他朋友激活. 我们把激活看做一个实体, 使用一张单独的表结构存储.

现在如果我们想使用ibatis来实现这个需求怎么办呢?

使用过ibatis 的人都会想到iterate. 没错我们现在就是要用ibatis的iterate来实现.

iterate标签有几个属性:

?

<iterateproperty="" /*可选, 从传入的参数集合中使用属性名去获取值, 这个必须是一个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指定的符号之前的符号*/></iterate>

?我们设置来做个实验:

?

<select id="test_iterate" parameterconjunction="conn" open="open" colse="close">/*使用java.util.List作为参数不能设置property属性*/<![CDATA[#v[]#]]>/*这里的"[]"是必须的, 要不然ibatis会把v直接解析为一个String*/</iterate></select>

?如果传入一个List为[1111,2222,3333], 上面将得到一个sql语句:

?

select * from tb_name where id=123 prepend open 1111 conn 2222 conn 3333 close

?对于上面的应用场景, 我们可以:

?

<insert id="betchAddNewActiveCode" parametername="code">insert into tb_active_code(code, create_uin, create_time) values (?, ?, ?) , (?, ?, ?) , (?, ?, ?)

?但是如果:

?

<insert id="betchAddNewActiveCode" parameteropen="(" close=")"><![CDATA[/*这里不加"("和")"*/#codes[].code#, #codes[].createUserId#, #codes[].createTime#]]></iterate></insert>

?那么产生的sql语句为:

?

insert into tb_active_code(code, create_uin, create_time) values ( ?, ?, ?   ,   ?, ?, ?   ,   ?, ?, ?)

?可以看到区别还是很大的.所以conjunction, open 和close这几个属性需要特别的区分开来.

?

?

可能有些地方理解的不是很好, 如果有错误, 还请不吝赐教.

?

参考连接:?http://ibatis.apache.org/docs/dotnet/datamapper/ch03s09.html#id386679

热点排行