日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

spring批量写入mysql数据库_MyBatis-spring和spring JDBC批量插入Mysql的效率比较

發布時間:2025/3/12 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring批量写入mysql数据库_MyBatis-spring和spring JDBC批量插入Mysql的效率比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

工具框架用spring-batch,數據庫是mysql(未做特殊優化)。

比較數據框架mybatis和spring jdbc的插入效率。

Mybatis三種實現:

1、mybatis的官方寫法

Java代碼

publicvoidbatchInsert1(List?poilist)throwsException?{

SqlSession?sqlSession?=?sqlSessionFactory.getObject().openSession(ExecutorType.BATCH);

PoiMapper?pmapper?=?sqlSession.getMapper(PoiMapper.class);

try{

for(Poi?poi?:?poilist)?{

pmapper.insertPoi(poi);

}

sqlSession.commit();

}?finally{

sqlSession.close();

}

}

其中Poi是一個bean。

PoiMapper定義:

Java代碼

publicinterfacePoiMapper?{

("insert?into?tb_poi?(tag,?poi,?poiid,?meshid,?owner,?featcode,?sortcode,?namec,?namee,?namep,?names)?values?(#{tag},?GeomFromText(#{point}),?#{poiid},?#{meshid},?#{owner},?#{featcode},?#{sortcode},?#{namec},?#{namee},?#{namep},?#{names})?")

publicvoidinsertPoi(Poi?poi);

}

2、利用mysql特性,拼寫insert sql。

Java代碼

publicvoidbatchInsert2(List?poilist)throwsException?{

SqlSession?sqlSession?=?sqlSessionFactory.getObject().openSession(ExecutorType.BATCH);

try{

sqlSession.insert("com.emg.trans.mapper.batchMapper.batchInsert",?poilist);

sqlSession.commit();

}?finally{

sqlSession.close();

}

}

“com.emg.trans.mapper.batchMapper.batchInsert”在mybatis的xml中定義的sql,定義如下:

Xml代碼

insert?into?tb_poi?(tag,?poi,?poiid,?meshid,?owner,?featcode,?sortcode,?namec,?namee,?namep,?names)?values

(#{poi.tag},?GeomFromText(#{poi.point}),?#{poi.poiid},?#{poi.meshid},?#{poi.owner},?#{poi.featcode},?#{poi.sortcode},?#{poi.namec},?#{poi.namee},?#{poi.namep},?#{poi.names})

3、利用spring的事務,直接執行插入操作。

Java代碼

@Transactional("dbTransaction")

publicvoidbatchInsert3(List?poilist)throwsException?{

for(Poi?poi?:?poilist)?{

apmapper.insertPoi(poi);

}

}

apmapper是PoiMapper的實例,用@Autowired配置。

Spring-JDBC的三種實現:

A、用spring事務執行插入操作

Java代碼

@Transactional("dbTransaction")

publicvoidbatchInsertJDBC1(List?poilist)throwsDataAccessException?{

String?sql?=?"insert?into?tb_poi?(tag,?poi,?poiid,?meshid,?owner,?featcode,?sortcode,?namec,?namee,?namep,?names)?values?(?,?GeomFromText(?),??,??,??,??,??,??,??,??,??)";

for(Poi?poi?:?poilist)?{

Object[]?args?=?{poi.getTag(),?poi.getPoint(),?poi.getPoiid(),?poi.getMeshid(),?poi.getOwner(),?poi.getFeatcode(),?poi.getSortcode(),?poi.getNamec(),

poi.getNamee(),?poi.getNamep(),?poi.getNames()};

jdbcTemplate.update(sql,?args);

}

}

B、用spring事務和springjdbc的batchUpdate

Java代碼

@Transactional("dbTransaction")

publicvoidbatchInsertJDBC2(List?poilist)throwsDataAccessException?{

String?sql?=?"insert?into?tb_poi?(tag,?poi,?poiid,?meshid,?owner,?featcode,?sortcode,?namec,?namee,?namep,?names)?values?(?,?GeomFromText(?),??,??,??,??,??,??,??,??,??)";

List?batchArgs?=?newArrayList();

for(Poi?poi?:?poilist)?{

Object[]?args?=?{poi.getTag(),?poi.getPoint(),?poi.getPoiid(),?poi.getMeshid(),?poi.getOwner(),?poi.getFeatcode(),?poi.getSortcode(),?poi.getNamec(),

poi.getNamee(),?poi.getNamep(),?poi.getNames()};

batchArgs.add(args);

}

jdbcTemplate.batchUpdate(sql,?batchArgs);

}

C、用spring事務,利用mysql特性,拼寫insert sql。

Java代碼

@Transactional("dbTransaction")

publicvoidbatchInsertJDBC3(List?poilist)throwsDataAccessException?{

StringBuffer?sqlbuf?=?newStringBuffer()

.append("insert?into?tb_poi?(tag,?poi,?poiid,?meshid,?owner,?featcode,?sortcode,?namec,?namee,?namep,?names)?values?");

MessageFormat?form?=?newMessageFormat("(''{0}'',?GeomFromText(''{1}''),?''{2}'',?''{3}'',?''{4}'',?''{5}'',?''{6}'',?''{7}'',?''{8}'',?''{9}'',?''{10}''),");

for(Poi?poi?:?poilist)?{

Object[]?args?=?{poi.getTag(),?poi.getPoint(),?poi.getPoiid(),?poi.getMeshid(),?poi.getOwner(),?poi.getFeatcode(),?poi.getSortcode(),?poi.getNamec().replaceAll("'","\\\\'"),

poi.getNamee().replaceAll("'","\\\\'"),?poi.getNamep().replaceAll("'","\\\\'"),?poi.getNames().replaceAll("'","\\\\'")};

sqlbuf.append(form.format(args));

}

String?sql?=?sqlbuf.toString();

sql?=?sql.substring(0,?sql.length()-1);

jdbcTemplate.update(sql);

}

測試一:每次處理100條,共600條。

測試二:每次處理1000條,共9000條。

直接上結論:

mybatis.1最慢。而且慢很多,很多。

mybatis.2很快。是mybatis中最快的。

mybatis.3比2慢一點。

jdbc.A比B稍快,兩者差不多,和mybatis.3也在伯仲之間。

jdbc.C最快,比其他5種都快。

大排行,從用時少到用時多:

jdbc.C < mybatis.2 < jdbc.A < jdbc.B , mybatis.3 << mybatis.1

總結

以上是生活随笔為你收集整理的spring批量写入mysql数据库_MyBatis-spring和spring JDBC批量插入Mysql的效率比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。