博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot+MybatisPlus实现批量添加的两种方式
阅读量:4304 次
发布时间:2019-06-06

本文共 3116 字,大约阅读时间需要 10 分钟。

第一种:

  因为Mysql数据每次发送sql语句的长度不能超过1M,所以,每次发送insert语句以固定长度发送:

  将sql语句在provider中,以固定长度装入List集合中,然后返回service层,调用mapp,发送sql语句

//provider类public class sql {	private List 
sqlList = new ArrayList<>(); private void makeUpSql(StringBuilder sql, StringBuilder paramSql2) { sqlList.add(sql.append(paramSql2.substring(0, paramSql2.length()-1)).toString()); } @SuppressWarnings("unchecked") public List
batchInsert(Map
map) throws Exception { List
beans = (List
) map.get("list"); int length = Numbers.parseInt(map.get("length")); Class
bclz = beans.get(0).getClass(); StringBuilder sql = batchInsertBeforeSql(beans); int sizeBefore = sql.toString().getBytes().length; StringBuilder paramSql2 = new StringBuilder(); for (IBean bean : beans) { int sizeSql1 = paramSql2.toString().getBytes().length+sizeBefore; StringBuilder paramSql2c = new StringBuilder(paramSql2.toString()); paramSql2.append("("); for(Field f : bclz.getDeclaredFields()) { f.setAccessible(true); if (!Modifier.isStatic(f.getModifiers())) {// 非静态资源 String fname = f.getName(); if("id".equals(fname) ) { continue; } String value = Strings.of(f.get(bean)).replaceAll("\"", "\\\\\""); value = value.replaceAll("\'", "\\\\\'"); paramSql2.append("\"").append(value).append("\", "); } } paramSql2 = new StringBuilder(paramSql2.substring(0, paramSql2.length()-2)); paramSql2.append("),"); if(sizeSql1
=length) { makeUpSql(sql,paramSql2c); Map
map1 = new HashMap<>(); List
nextList = beans.subList(beans.indexOf(bean), beans.size()); map1.put("list", nextList); map1.put("length", length); return batchInsert(map1); } } sqlList.add(sql.append(paramSql2.substring(0, paramSql2.length()-1)).toString()); return sqlList; } public StringBuilder batchInsertBeforeSql(List
beans) { StringBuilder sql = new StringBuilder("insert into "); Class
bclz = beans.get(0).getClass(); sql.append(bclz.getSimpleName().toLowerCase()).append(" ("); StringBuilder paramSql = new StringBuilder(); for(Field f : bclz.getDeclaredFields()) { f.setAccessible(true); if (!Modifier.isStatic(f.getModifiers())) {// 非静态资源 String fname = f.getName(); if("id".equals(fname) ) { continue; } paramSql.append(",").append(fname); } } return sql.append(paramSql.substring(1)).append(") values "); }//service层public void sendSql(List
listSql) { for (String sql : listSql) { Mapper.batchInsert3(sql); }//mapper层@Insert("${sql}")int batchInsert3(@Param("sql") String sql);

 

 

第二种:

  创建一个session,将每条insert语句单条调用mapper,使用session统一commit

//若指定有多个数据源,需要添加注解@Qualifier,指明使用哪个数据库的SqlSessionTemplate @Qualifier("kwSqlSessionTemplate")@Autowiredprivate SqlSessionTemplate sqlSessionTemplate;public void batchInsert(List
beanList) { SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false); IssueMapper mapper = session.getMapper(IssueMapper.class); try { for (int i = 0;i

   

  

 

转载于:https://www.cnblogs.com/chcha1/p/11099876.html

你可能感兴趣的文章
POJ 1308 Is It A Tree? (并查集)
查看>>
关于xcode7编译旧项目崩溃-[UIApplication _runWithMainScene:transitionContext:completion:]
查看>>
【常见Web应用安全问题】---5、File Inclusion
查看>>
函数及自定义函数
查看>>
BZOJ_1798_&_Codevs_2216_[AHOI_2009]_行星序列_(线段树)
查看>>
BZOJ_1009_[HNOI2008]_GT考试_(动态规划+kmp+矩阵乘法优化+快速幂)
查看>>
六月计划#2B(6.10-6.16)
查看>>
了解 DB2 Version 9.5 中的全局变量(转)
查看>>
c# 数组和集合
查看>>
vm+ubuntu联网
查看>>
netflix 推荐算法学习1(转)
查看>>
python从socket做个websocket的聊天室server
查看>>
java标号
查看>>
[Computation]集合、关系、语言
查看>>
20130328java基础学习笔记-循环结构for以及for,while循环区别
查看>>
caffe网络模型各层详解(一)
查看>>
第三章总结
查看>>
【转载】什么是C++虚函数、虚函数的作用和使用方法
查看>>
POJ 1745 Divisibility DP
查看>>
SPSS学习中涉及的统计知识
查看>>