首先请先看我前面一篇帖子了解oracle批量插入的sql:【oracle 批量插入-支持序列自增】
我用的ibatis2.0,sqlMap文件引入的标签如下:
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
1、java代码:
TestBatch:数据库对应的对象;
该方法入参是一个List<TestBatch>,将list放入一个map里面,然后调用对应的sqlMap。
@Override public void insertBatch(List<TestBatch> testBatchList) { HashMap paramMap = new HashMap(); paramMap.put("v", tradeDetailList); getSqlMapClientTemplate().insert(getSqlMapSpace() + ".insertBatch", paramMap); }
2、sqlMap:
<insert id="insertBatch" parameterClass="net.sf.json.JSONObject"> insert into test_batch (id, name, account) select seq_test_batch.nextval, name, account from ( <iterate property="v" conjunction="union"> select #v[].name# name, #v[].account# account, from dual </iterate> ) ctd </insert>
|seq_test_batch.nextval:获取序列。
|iterate标签内红色加粗的字体是固定写法,当然property="v"中,"v"是可以自定定义的。
|循环后的结果其实就是拼成下图红框内容的SQL。
亲测,该版本ibatis+oracle可用。460条数据插入时间5秒左右,当然我是用项目开发环境测试的,测试的那张表有30多个字段。