前言:
当前我们对“java批量提交数据”可能比较看重,同学们都需要了解一些“java批量提交数据”的相关内容。那么小编同时在网上网罗了一些关于“java批量提交数据””的相关内容,希望姐妹们能喜欢,小伙伴们一起来学习一下吧!一、xml
<!-- 批量插入数据--><insert id="saveList"> insert into user(name,age) values <foreach item="item" index="index" collection="list" separator=","> (#{item.name},#{item.age}) </foreach></insert>
二、DAO
// 批量增加保存public int saveList(List<User> list);
三、Services
// 批量增加保存public int saveList(List<User> list) { return userMapper.saveList(list);}
四、前端页面
<form th:action="@{/user/uploadExcel}" method="post" enctype="multipart/form-data"> <input type="file" name="file"/> <input type="submit" value="上传文件"></form>
五、Controller
@PostMapping("/uploadExcel")public String upload(MultipartFile file) throws IOException { EasyExcel.read(file.getInputStream(), User.class, new ExcelListener(userService)).sheet().doRead(); return "redirect:/user/list";}
六、Listener
package pers.gl.service;import java.util.ArrayList;import java.util.List;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.alibaba.excel.context.AnalysisContext;import com.alibaba.excel.event.AnalysisEventListener;import com.alibaba.fastjson.JSON;import pers.gl.entity.User;public class ExcelListener extends AnalysisEventListener<User> {private static final Logger logger = LoggerFactory.getLogger(User.class);/** * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 */private static final int BATCH_COUNT = 5;List<User> list = new ArrayList<>();private UserService userService;// 构造函数,一定要写,添加到监听中public ExcelListener(UserService userService) {this.userService = userService;}@Overridepublic void invoke(User data, AnalysisContext context) {// TODO Auto-generated method stublogger.info("invoke方法被调用");logger.info("解析到一条数据:{}", JSON.toJSONString(data));list.add(data);// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOMif (list.size() >= BATCH_COUNT) {saveData();// 存储完成清理 listlist.clear();}}/** * 所有数据解析完成了 都会来调用 * * @param context */@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// TODO Auto-generated method stubSystem.out.println("doAfterAllAnalysed方法 被调用");// 这里也要保存数据,确保最后遗留的数据也存储到数据库saveData();logger.info("所有数据解析完成!");}/** * 加上存储数据库 */private void saveData() {logger.info("{}条数据,开始存储数据库!", list.size());userService.saveList(list);logger.info("存储数据库成功!");}}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #java批量提交数据 #spring事务分批提交