首先请先看我前面一篇帖子了解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多个字段。