ibatis批量insert写法详解

KLQ 2020-07-24 11:56:58 java常见问答 5846

下面要给大家分享一个ibatis使用iterate实现批量插入insert正确写法的内容,对这个方面感兴趣的小伙伴一起来看看吧!

因为想要批量入库提升效率,所以实现了ibatis的批量插入,但是却出现了一直报错的情况。

报错 :StringIndexOutOfBoundsException

经过查询发现是value中的格式错误。

下面是正确的

写法示例:

RecieveDataRecordsDao

public long iterate_insert(List < RecieveDataRecordsDB > db)
{
    Object obj = getSqlMapClientTemplate()
        .insert("iterate_insert", db);
    if (obj == null)
    {
        return 0;
    }
    return (Long) obj;
}
mapper.xml


<insert  id ="iterate_insert"   parameterClass ="java.util.List">

insert into recieve_data_records (trader_serial_id,phone_num,data_volume,timestamp,lasttime,errorcount,errordesc,errorchannel,type,operator,provinceId,appid) values      

      
    <iterate  conjunction =","  >
     (#db[].trader_serial_id:VARCHAR#,#db[].phone_num:BIGINT#,#db[].data_volume:BIGINT#,#db[].timestamp:BIGINT#,#db[].lasttime:BIGINT#,#db[].errorcount:INTEGER#,#db[].errordesc:VARCHAR#,#db[].errorchannel:INTEGER#,#db[].type:INTEGER#,#db[].operator:INTEGER#,#db[].provinceid:VARCHAR#,#db[].appid:VARCHAR#)         
      </iterate>
</insert>

这里要注意一下:

value内的值,一定要按照 #传入参数名[].属性名:类型 这个格式写,不然的话就会报StringIndexOutOfBoundsException异常;方括号将参数标记为List,不然的话解析器会简单的将List输出成String。

假如传入的参数类型是List,那么就不需要在iterate上写property属性。

ibatis使用iterate实现批量插入insert的正确写法你都了解了吗?更多java程序代码例子,可以继续通过奇Q工具网来进行了解呢。

推荐阅读:

ibatis动态拼接sql怎么实现?

Hibernate使用原生sql语句例子

ibatis批量更新sql如何编写?