本篇效率最高!!!-在插入十万行左右数据到数据库时。推荐细看。
详细思路请看springboot读取本地大文档1G目录导航-8
插入千万行以上最高效参考

分为三层
1.controller层
@ApiOperation("insert接口-Bach&Simble添加数据")
@RequestMapping(value = "insertTableSimble", method = RequestMethod.POST)
@ResponseBody
public void insertTableSimbleController(){
tsi.insertTableBachSimbleService();
}
2.service层
接口
void insertTableBachSimbleService();
实现类
/*2.bach simble*/
@Override
public void insertTableBachSimbleService() {
/*1.手动提交 所以是false*/
SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(
ExecutorType.BATCH, false);
/*2.获取mybatis对象*/
tm = session.getMapper(TableMapper.class);
try {
/*3.获取文件*/
File file = new File("C:/Users/admin/Desktop/cities500.txt");
/*4.将文件存入集合 工具类 ReadTxt.txt2String(file)*/
List<Geoname> al = ReadTxt.txt2String(file);
/*5.每次1000条 共 size次*/
int size = al.size()/1000;
for (int i = 1; i <= size+1; i++) {
long time1 = System.currentTimeMillis();
/*6.遍历每条插入到数据库 例如 i 3 插入3000 到4000条 */
for(int k = (i-1)*1000;k<i*1000&&k<al.size();k++){
tm.insertTableSimble(al.get(k));
}
//手动每1000个一提交,提交后无法回滚
session.commit();
//清理缓存,防止溢出
session.clearCache();
long time2 = System.currentTimeMillis();
System.out.println("第"+i+"次耗时:"+(time2-time1));
}
} catch (Exception e) {
//没有提交的数据可以回滚
session.rollback();
} finally {
session.close();
}
}
工具类
/**
* 1.一次性读取txt文件的内容 将文件内容存入集合
* @param file 想要读取的文件对象
* @return 返回文件内容
*/
public static ArrayList<Geoname> txt2String(File file){
ArrayList<Geoname> al = new ArrayList<>();
try{
BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件
String s = null;
while((s = br.readLine())!=null){//使用readLine方法,一次读一行
String[] sz = s.split("\t");
Geoname g = new Geoname(sz[0],sz[1],sz[2],sz[3],sz[4],sz[5],sz[6],sz[7],sz[8],sz[9],sz[10],sz[11],sz[12],sz[13],sz[14],sz[15],sz[16],sz[17],sz[18]);
al.add(g);
}
br.close();
}catch(Exception e){
e.printStackTrace();
}
return al;
}
mapper层
接口
void insertTableSimble(Geoname g);
实现类
<!--/*4.添加信息*/-->
<insert id="insertTableSimble" parameterType="com.example.springboot6.bean.Geoname" >
insert into allCountries (geonameid,name,asciiname,alternatenames,latitude,longitude,feature_class,feature_code,country_code,cc2,admin1_code,admin2_code,admin3_code,admin4_code,population,elevation,dem,timezone,modification_date)
values (#{geonameid,jdbcType=INTEGER},#{name,jdbcType=VARCHAR},#{asciiname,jdbcType=VARCHAR},#{alternatenames,jdbcType=VARCHAR},#{latitude,jdbcType=DOUBLE},#{longitude,jdbcType=DOUBLE},#{featureClass,jdbcType=CHAR},#{featureCode,jdbcType=VARCHAR},#{countryCode,jdbcType=VARCHAR},#{cc2,jdbcType=VARCHAR},#{admin1Code,jdbcType=VARCHAR},#{admin2Code,jdbcType=VARCHAR},#{admin3Code,jdbcType=VARCHAR},#{admin4Code,jdbcType=VARCHAR},#{population,jdbcType=BIGINT},#{elevation,jdbcType=INTEGER},#{dem,jdbcType=INTEGER},#{timezone,jdbcType=VARCHAR},#{modificationDate,jdbcType=DATE})
</insert>
完毕!
版权声明:本文为weixin_46485576原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。