在實踐中遇到了業務批量插入數據的場景比較多,簡單的總結了一下,希望能幫到有需要的同學。
自己整理的JAVA架構學習視頻和大廠項目底層知識點,需要的同學歡迎私信我【資料】發給你~一起學習進步!
1.mApper.xml文件sql語句如下:
<mappers>
<mapper resource="mapper/Mapper.xml"/>
</mappers>
2.MyBatis-config.xml文件中需要加上下面的配置:
/**
* 批量插入
* @param linkLists
* @return
*/
int insertBatch(List<LinkList> linkLists);
3.dao層代碼:
/**
* 批量插入
* @param linkLists
* @return
*/
int insertBatch(List<LinkList> linkLists);
4.service層代碼如下:
@Override
public int insertBatch(List<LinkList> linkLists) {
return linkListDao.insertBatch(linkLists);
}
5.impl接口實現:
if (size > 1) {//批量插入
long beginTime = System.currentTimeMillis(); System.out.println("multi begin time:" + beginTime);
SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);//關閉session的自動提交;
try { int result = sqlSession.insert("com.netease.klqa.report.dao.LinkListDao.insertBatch", insertData);
sqlSession.commit(); // System.out.println("dyy" + result);
} finally { sqlSession.close(); } System.out.println("multi end time:" + (System.currentTimeMillis() - beginTime));
} else if (size == 1) {//單條插入
System.out.println("one begin time:" + System.currentTimeMillis());
LinkList linkList = insertData.get(0);
if (linkList != null) {
linkList.setVersionId(versionId); linkListService.insert(linkList); } System.out.println("one end time:" + System.currentTimeMillis());
}
6.controller層實現代碼如下:
if (size > 1) {//批量插入
long beginTime = System.currentTimeMillis(); System.out.println("multi begin time:" + beginTime);
SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);//關閉session的自動提交;
try { int result = sqlSession.insert("com.netease.klqa.report.dao.LinkListDao.insertBatch", insertData);
sqlSession.commit(); // System.out.println("dyy" + result);
} finally { sqlSession.close(); } System.out.println("multi end time:" + (System.currentTimeMillis() - beginTime));
} else if (size == 1) {//單條插入
System.out.println("one begin time:" + System.currentTimeMillis());
LinkList linkList = insertData.get(0);
if (linkList != null) {
linkList.setVersionId(versionId); linkListService.insert(linkList); } System.out.println("one end time:" + System.currentTimeMillis());
}
總結
至此就可以實現簡單的批量插入了,數據量少的時候,性能優勢不是很明顯,可以使用單條插入;當數據量很大的時候,此時就能凸顯批量插入的優勢。
來源:網易工程師--段云雁
有任何問題歡迎留言交流~
整理總結不易,如果覺得這篇文章有意思的話,歡迎轉發、收藏,給我一些鼓勵~
有想看的內容或者建議,敬請留言!
最近利用空余時間整理了一些精選Java架構學習視頻和大廠項目底層知識點,需要的同學歡迎私信我發給你~一起學習進步!有任何問題也歡迎交流~
Java日記本,每日存檔超實用的技術干貨學習筆記,每天陪你前進一點點~