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

讯享网

分为三层
1.controller层
@ApiOperation("insert接口-Bach&Simble添加数据") @RequestMapping(value = "insertTableSimble", method = RequestMethod.POST) @ResponseBody public void insertTableSimbleController(){
tsi.insertTableBachSimbleService(); }
讯享网
讯享网 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; }
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>
完毕!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/119047.html