記一次使用原生jdbc批量插入資料時踩到的坑

2021-09-25 04:28:31 字數 842 閱讀 6098

有一業務場景, 需要初始化所有員工本月的考勤台賬. 基本流程是刪掉原來的資料 -- >然後重新插入--> 插入月統計表資料 當時場景900員工, 乙個月算30天, 一次初始化要插入2.7w資料.如果dao層框架insert. 要差不多40s. 所以用jdbc進行批量操作

public void initmonth()

}ps.executebatch();

}});

//計算並插入月考勤統計表資料....

}

該業務方法涉及多表操作,如果自己進行commit會比較麻煩, 系統使用了spring.故該業務方法的事務由spring管理了.

測試的時候發現出現阻塞.一直插入不了資料. 排查發現是這裡的鍋.

session session = this.sqldao.gethibernatetemplate().getsessionfactory().opensession();
hibernate的opensession是開啟乙個新的對話.那麼和前面deleteold()的session是不同乙個,而且因為事務給spring管理. deleteold方法執行後沒有提交事務, 這邊又起了另外乙個session.對同一張表操作.阻塞了.

所以應該使用getcurrentsession.獲取當前的session進行操作

session session = attendanceuserdaydao.gethibernatetemplate().getsessionfactory()

.getcurrentsession();

也可以使用jdbctemplate進行批量插入, 原理一樣

記一次muse ui 使用

vue init webpack test musenpm i muse ui snpm i babel plugin import less less loader d然後,將.babelrc的 plugins 裡面新增一段 裡面的 plugins import 在使用的時候出現過乙個問題,專案本...

記一次vue splitpane使用

splitpane 分割面板元件 介紹,是乙個可以拖動選單寬度,可以生成想要 的選單寬度和內容寬度的一種布局方式。v on resize resize methods else if newwidth this.stepboxwidth this.stepboxwidth json.parse js...

記一次的使用

將jsp拆分frame框架,因為採用了第一種方式,一直在考慮用jquery非同步請求獲取資料,總是但不到效果,終於在js寫吐的時候選擇了第二種方式。參考網上的使用,大多是下面這個樣子,如果涉及靜態頁面之間定位,是沒有問題的 href 為目標頁面 通過target定位到frame views main...