mybatis 批量添加

批量添加怎么做呢图仓?

1:mybatis <foreach> 標(biāo)簽拼接 insert values海蔽;

2:今天說第二種:mybatis ExecutorType.BATCH拥刻;

大致邏輯就是從 sqlsessionfactory 取出 mapper淮腾,然后 sqlsession 是 ExecutorType.BATCH;

再獲取的 mapper 再執(zhí)行 insert 等操作谭梗;

原理類似: 開啟 一個(gè) mysql 事物监婶,寫一批的insert旅赢,最后事物提交,錯(cuò)誤就回滾惑惶;

具體代碼如下:

@Component?

public class SqlSessionBatch<T> {

? ? public class Entry{

? ? ? ? private T t;

? ? ? ? private SqlSession sqlSession;

? ? ? ? public Entry(T t, SqlSession sqlSession) {

? ? ? ? ? ? this.t= t;

? ? ? ? ? ? this.sqlSession= sqlSession;

}

? ? ? ? public T getT() {

? ? ? ? ? ? return t;

}

? ? ? ? public void setT(T t) {

? ? ? ? ? ? this.t= t;

}

? ? ? ? public SqlSession getSqlSession() {

? ? ? ? ? ? return sqlSession;

}

? ? ? ? public void setSqlSession(SqlSession sqlSession) {

? ? ? ? ? ? this.sqlSession= sqlSession;

}

}

? ? @Autowired

? ? private BeanFactory beanFactory;

? ? /**

? ? * 獲取指定 mapper 使用的 SqlSessionFactory(適合多數(shù)據(jù)源配置多個(gè) SqlSessionFactory)

? ? * @param mapper

? ? * @return

? ? */

? ? public Entry getSqlSession(Class<T> mapper) {

? ? ? ? Asserts.beanNotEmpty(mapper, "params mapper can't null!");

? ? ? ? // 獲取每個(gè)數(shù)據(jù)源配置的sqlSessionTemplate

? ? ? ? String[] sqlSessionTemplates=

? ? ? ? ? ? ? ? ((DefaultListableBeanFactory)beanFactory).getBeanNamesForType(SqlSessionFactory.class);

? ? ? ? for(String sqlSessionTemplate: sqlSessionTemplates){

? ? ? ? ? ? SqlSessionFactory sf= beanFactory.getBean(sqlSessionTemplate, SqlSessionFactory.class);

? ? ? ? ? ? if(sf.getConfiguration().hasMapper(mapper)){

? ? ? ? ? ? ? ? SqlSession sqlSession= sf.openSession(ExecutorType.BATCH, false);

? ? ? ? ? ? ? ? return new Entry(sqlSession.getMapper(mapper), sqlSession);

}

}

? ? ? ? throw new GeneralException(String.format("batch error: mapper - %s can't found!", mapper.getName()));

}

? ? /**

? ? * 提交

? ? * @param e

? ? */

? ? public void commit(Entry e){

? ? ? ? e.getSqlSession().flushStatements();

? ? ? ? e.getSqlSession().clearCache();

}

}

然后在service實(shí)現(xiàn)層這么用:

@Service

public class UserSiteServiceImpl implements UserSiteService {

? ? @Autowired

? ? private WnUserSiteMapper wnUserSiteMapper;

? ? @Autowired

? ? private SqlSessionBatch<WnUserSiteMapper> userSiteMapperSqlSessionBatch;


??? @Transactional(rollbackFor = Exception.class)

??? protected void batchAddUserSites(List<WnUserSite> userSites) {

? ? SqlSessionBatch.Entry e= userSiteMapperSqlSessionBatch.getSqlSession(WnUserSiteMapper.class);

? ? WnUserSiteMapper userSiteMapper= (WnUserSiteMapper) e.getT();

? ? for(WnUserSite userSite: userSites){

? ? ? ? userSiteMapper.insert(userSite);

???? }

? ????? userSiteMapperSqlSessionBatch.commit(e);

???? }

}

以上就是代碼煮盼;注意一點(diǎn)哦:記得在數(shù)據(jù)源上的bean配置上加上 @EnableTransactionManagement 事物注解哦,

這樣遇到錯(cuò)誤的時(shí)候带污,批量添加的時(shí)候也可以回滾哦僵控;同時(shí)在一個(gè)數(shù)據(jù)源上,mapper不要跨sqlsessionfactory哦

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鱼冀,一起剝皮案震驚了整個(gè)濱河市报破,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌千绪,老刑警劉巖充易,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異翘紊,居然都是意外死亡蔽氨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門帆疟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鹉究,“玉大人,你說我怎么就攤上這事踪宠∽耘猓” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵柳琢,是天一觀的道長绍妨。 經(jīng)常有香客問我润脸,道長,這世上最難降的妖魔是什么他去? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任毙驯,我火速辦了婚禮,結(jié)果婚禮上灾测,老公的妹妹穿的比我還像新娘爆价。我一直安慰自己,他們只是感情好媳搪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布铭段。 她就那樣靜靜地躺著,像睡著了一般秦爆。 火紅的嫁衣襯著肌膚如雪序愚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天等限,我揣著相機(jī)與錄音爸吮,去河邊找鬼。 笑死望门,一個(gè)胖子當(dāng)著我的面吹牛拗胜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怒允,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锈遥!你這毒婦竟也來了纫事?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤所灸,失蹤者是張志新(化名)和其女友劉穎丽惶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爬立,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钾唬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侠驯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抡秆。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吟策,靈堂內(nèi)的尸體忽然破棺而出儒士,到底是詐尸還是另有隱情,我是刑警寧澤檩坚,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布着撩,位于F島的核電站诅福,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拖叙。R本人自食惡果不足惜氓润,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薯鳍。 院中可真熱鬧咖气,春花似錦、人聲如沸辐啄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壶辜。三九已至悯舟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砸民,已是汗流浹背抵怎。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岭参,地道東北人反惕。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像演侯,于是被迫代替她去往敵國和親姿染。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容