数据采集提升性能篇-使用Mybatis的批量操作api导入数据
生活随笔
收集整理的這篇文章主要介紹了
数据采集提升性能篇-使用Mybatis的批量操作api导入数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
每次發送過來的數據,會包含多個傳感器的值,每個傳感器的數據都要存到數據庫,如果每次都調用dao去保存,那性能比較低,應該進行優化,要用到mybatis的批量操作
通常大家都會使用mybatis的 <foreach>標簽去執行批量的insert操作,這種做法是有問題的,foreach標簽中在做字符串的拼接的時候,對于字符串的最大長度是有限制的,如果你的數據特別多,這時拼接會報錯,一般的培訓機構或網上的教程都不會指明這一點。應該采用另外的辦法,就是mybatis的batch操作。
網上的例子
@Autowired private SqlSessionFactory sqlSessionFactory;@Transactional(rollbackFor = Exception.class) @Override public void batchTest() {SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);CountryMapper mapper = sqlSession.getMapper(CountryMapper.class);List<Country> countries = mapper.selectAll();for (int i = 0; i < countries.size(); i++) {Country country = countries.get(i);country.setCountryname(country.getCountryname() + "Test");mapper.updateByPrimaryKey(country);//每 50 條提交一次if((i + 1) % 50 == 0){sqlSession.flushStatements();}}sqlSession.flushStatements(); }自己的流程:
1)注入工廠類
//批量插入 @Autowired private SqlSessionFactory sqlSessionFactory;2)根據工廠類得到批量操作的session:指定這個參數ExecutorType.BATCH
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);3)執行你的 dao的sava操作
deviceGatherDao.save(deviceGather);//。。。很多的save4)執行提交
sqlSession.flushStatements();?
總結
以上是生活随笔為你收集整理的数据采集提升性能篇-使用Mybatis的批量操作api导入数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用SpringTask定时获取传感器设
- 下一篇: 构建聚合工程