其主要思想是把数据存放在一个ArrayList中,然后通过mybatis循环插入数据
首先在Service中开启session:
//开启session
SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
VehicleDao dao = session.getMapper(VehicleDao.class);
然后设置每100条数据插入一次数据库(100还是多少,看自己的数据量)
if (i % 100 == 0 || i == size - 1) {
dao.insertVehicle(vehicles);
//清除集合中的元素,防止反复插入
vehicles.clear();
//每100条记录提交一次,提交后无法回滚
session.commit();
//清除缓存,防止溢出
session.clearCache();
}
mybatis批量插入oracle,与mysql有些许不同,主要体现在不适用values,而是使用select(个人认为,有错误望指教):
<insert id="insertVehicle" useGeneratedKeys="false" parameterType="List">
insert into VEHICLE(registrationno, drivername, alarmkindname, gpsspeed, latitude_d, longitude_d, alarmtime, ideaid, dealtime, transact_result, dealcontent)
<foreach open="(" close=")" collection="list" item="item" separator="union all">
select
#{item.registrationNo,jdbcType=VARCHAR},
#{item.driverName,jdbcType=VARCHAR},
#{item.alarmKindName,jdbcType=VARCHAR},
#{item.gpsSpeed,jdbcType=DOUBLE},
#{item.latitude_D,jdbcType=DOUBLE},
#{item.longitude_D,jdbcType=DOUBLE},
#{item.alarmTime,jdbcType=VARCHAR},
#{item.ideaId,jdbcType=INTEGER},
#{item.dealTime,jdbcType=VARCHAR},
#{item.transact_result,jdbcType=VARCHAR},
#{item.dealContent,jdbcType=VARCHAR}
from dual
</foreach>
</insert>
完整demo:https://github.com/wucanhong/Vehicle.git