其主要思想是把数据存放在一个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