博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
批量更新代码整理(代码库)从数组中批量取数据的方法
阅读量:6550 次
发布时间:2019-06-24

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

查询出所有的数据,分批插入。从原来的所有的list 数据里面,每次拿出X 条数据,再批量更新

public void insertStudent() {    List
list = studentDao.listAllStudentForStat(); int batchNum = 2000; //批量更新的条数,每X条更新一次 for (int i = 0; i < list.size(); i += batchNum) { List
ansList = new ArrayList<>(batchNum); int max = i + batchNum < list.size() ? i + batchNum : list.size(); ansList.addAll(list.subList(i, max)); try { if (!ansList.isEmpty()) { //批量插入 studentDao.insertOrUpdateStudentList(ansList); logger.info("定时更新student表时,更新了 {} 数据,最后的指针为 {}", ansList.size(), max); } } catch (Exception e) { logger.error("更新student表异常,异常信息为:{}", e.getMessage(), e); } }}

 

升级版

查询出所有的数据,分批插入,并且插入的每条数据需要再通过其他的表来赋值特定的字段。

如果在for循环里,每次都查询表,也很耗性能,比较好的办法,一次查询,放到map里,从内存里进行查询

public void insertStudent() {    List
list = studentDao.listAllStudentForStat(); int batchNum = 2000; //批量更新的条数,每X条更新一次 for (int i = 0; i < list.size(); i += batchNum) { List
ansList = new ArrayList<>(batchNum); int max = i + batchNum < list.size() ? i + batchNum : list.size(); ansList.addAll(list.subList(i, max)); try { //批量查询 List
userLastLoginDateList = userDao.listLastLoginDateByStudentList(studentList); //将查询出的实体放到map对象里去 Map
userLastLoginDateMap = new HashMap<>(); if (userLastLoginDateList != null && !userLastLoginDateList.isEmpty()) { for (UserLoginDateVo item : userLastLoginDateList) { userLastLoginDateMap.put(item.getUid(), item.getLoginDate()); } } //从map对象中取值,赋给实体对象 for (Student student : ansList) { student.setLoginTime(Optional.ofNullable(userLastLoginDateMap.get(student.getUid())).orElse(DateUtil.getDefaultDate())); } if (!ansList.isEmpty()) { //批量插入 studentDao.insertOrUpdateStudentList(ansList); logger.info("定时更新student表时,更新了 {} 数据,最后的指针为 {}", ansList.size(), max); } } catch (Exception e) { logger.error("更新student表异常,异常信息为:{}", e.getMessage(), e); } }}

 

 原创文章,欢迎转载,转载请注明出处!

你可能感兴趣的文章
API开发 – 让异常变得优雅
查看>>
【270天】每日项目总结系列008(2017.11.02)
查看>>
记一次线上CPU超高的排查过程
查看>>
获取群成员邀请关系
查看>>
Ionic:livereload on iOS and android
查看>>
react day one 让陡峭的学习曲线平缓一点
查看>>
Coursera 的 GraphQL 之旅
查看>>
打造高性能高可靠块存储系统
查看>>
TCP/IP及内核参数优化调优
查看>>
LINUX查看CPU信息
查看>>
AppServ开启虚拟主机
查看>>
如何定位和解决Andorid的内存溢出问题(大总结)
查看>>
Linux下php安装openSSL模块
查看>>
如何删除mysql数据库的日志文件
查看>>
Swift/OC计时器使用方法
查看>>
AD的备份与还原
查看>>
和第三代动词算子式代码生成器光配合的前后端分离示例代码
查看>>
502 Bad Gateway 错误的解决办法
查看>>
convirt(二)—— 创建第一台虚机
查看>>
足球——2011-2012意甲球队队标
查看>>