1.iterate标签: 该标签是针对对象的一个属性集合(或者数组)进行操作的,对应表中相应列的多个值;它有如下属性。
property–对应对象的属性名
prepend–对应迭代值的前缀
open– 对应值遍历前的初始符号, 如: prepend=”IN “, open=”(” ,则生成的语句是”IN (“
close– 遍历后值的结束符,即值被包装在open和close中
conjunction–属性值直接的分隔符,如: conjunction=”,”则结合上面的设置语句最终如下:
IN ( v1, v2,…)
removeFirstPrepend–移除第一个追加字符,如prepend=”OR”, 则第一个标签就是OR,则不符合SQL语法,所以将其设置为
true 防止语法错误。
2.使用iterate进行批量插入:
insert into tb_active_code(code, create_user_id, create_time) values
<!-- 该iterate将对应的对象的集合生成insert into批量插入时的多条记录 -->
<![CDATA[<!--这里使用了括号,所以使用该方法防止ibatis转义时出错。 -->
(#codes[].code#, #codes[].createUserId#, #codes[].createTime#)
]]>
1
2
3
4
5
6
7
8
9
批量改、删:
3. 更新只能针对不同的记录更新的列是同一个值,如下:
update set
p1 = ""<!-- 针对常量 -->
WHERE
#values[]#
1
2
3
4
5
6
7
8
删除和更新是一样的,通过使用IN选项来实现对应列的删除。
4.通过ibatis的提供的方法来实现update的批量更新(更新的列值不同):
通过sqlMapClient的startTransaction()开启事务, startBatch()开始批操作, executeBatch()执行批操作, commitTransaction()
提交事务,endTransaction()结束事务。通过这几个方法结合实现批量更新,具体操作如下:
/**
* @Description: 使用iBatis进行批量操作,并且使用事务
* @param sqlMapClient
* @param infos 要更新的数据集合
* @param size 集合长度
*/
public void updateBatch(SqlMapClient sqlMapClient, List infos, int size)
{
try{
// 事务开始
sqlMapClient.startTransaction();
// 批量操作开始
sqlMapClient.startBatch();
for (int i = 0; i < size; i++) {
// 保存数据
sqlMapClient.update("BUS_TICKET_SELL.updateVerifyStatus", infos.get(i));
}
// 批量操作执行
sqlMapClient.executeBatch();
// 事务提交
sqlMapClient.commitTransaction();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 事务结束
sqlMapClient.endTransaction();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}