实体类记录批量导入mysql数据库操作

该博客介绍了如何通过Controller、Service和ServiceImpl实现Excel文件中的实体类记录批量导入到MySQL数据库的过程。在导入前,首先进行数据去重,然后对比数据库中是否存在相同数据,最后设置唯一ID和创建时间并执行数据库批量插入操作。
摘要由CSDN通过智能技术生成

实体类记录批量导入mysql数据库操作

  1. controller

        /**
         * 通过Excel批量插入实体类
         * @param list Excel文件记录
         * @return ResultBody
         */
        @Override
        @PostMapping("/batchInsert")
        public ResultBody batchInsert(@RequestBody List<Entity> list){
            logger.info("批量插入实体类记录:{}", JSONUtil.toJsonStr(list));
            return ResultBody.success(this.entityService.batchInsert(list));
        }
    
  2. service 定义

        SelectBean batchInsert(List<Entity> list);
    
  3. SelectBean

    
    import lombok.Data;
    /**
     * @Description 下拉列表类,用于后端管理
     */
    @Data
    public class SelectBean {
        /**
         * 标识
         */
        private String key;
        /**
         * 值
         */
        private String value;
    }
    
  4. serviceImpl实现

        /**
         * 通过Excel批量插入实体类
         * @param list Excel文件读取的记录
         * @return void
         */
        @Override
        public SelectBean batchInsert(List<Entity> list){
            if (list != null && list.size() > 0) {
                Integer oldSize = list.size();
                //自身去重
                list = list.stream().collect(Collectors.collectingAndThen(
                        Collectors.toCollection(() -> new TreeSet<>(
                                Comparator.comparing(p -> p.getName() + ";" + ";" + p.getPhone()))), ArrayList::new));
                //查询数据库中是否存在相同数据
                for (int s = list.size() - 1; s >= 0; s--) {
                    Entity entity1 = new Entity();
                    entity1.setName(list.get(s).getName());
                    entity1.setPhone(list.get(s).getPhone());
                    List<Entitylist> entitylistList = this.entitylistDao.queryAll(entity1);
                    if (entitylistList != null && entitylistList.size() > 0) {
                        list.remove(s);
                    }
                }
                //设置id与时间
                list.forEach(entitylist -> {
                    entitylistentitylist.setId(IdWorker.getId());
                    entitylist.setCreateTime(LocalDateTime.now());
                });
                if (list.size() > 0) {
                    this.entitylistDao.batchInsert(list);
                }
                Integer newSize = list.size();
                SelectBean selectBean = new SelectBean();
                selectBean.setKey(oldSize.toString());
                selectBean.setValue(newSize.toString());
                return selectBean;
            }
            return null;
        }
    
  5. Dao

        /**
         * 通过Excel批量插入实体类
         * @param list Excel文件读取的记录
         * @return void
         */
        void batchInsert(@Param("list") List<Entity> list);
    
  6. sql

        <insert id="batchInsert">
            insert into t_entitylist(id, name, phone, create_time)
            values
            <foreach collection="list" item="blacklist" separator=",">
                (#{entitylist.id},#{entitylist.phoneNum},#{entitylist.createTime})
            </foreach>
        </insert>
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里是SpringBoot+Mybatis-plus整合easyExcel批量导入Excel到数据库+导出Excel的方法。 1. 添加依赖 在 pom.xml 文件中添加以下依赖: ```xml <!-- easyExcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> ``` 2. 创建实体类 创建一个实体类,用于映射 Excel 表格中的数据。 ```java @Data public class User { @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private Integer age; @ExcelProperty("性别") private String gender; } ``` 3. 创建Excel读取器 创建一个 Excel 读取器,用于读取 Excel 表格中的数据,并将数据存储数据库中。 ```java @Component public class ExcelReader { @Autowired private UserService userService; /** * 读取 Excel 表格中的数据,并将数据存储数据库中 */ public void readExcel(String fileName) { EasyExcel.read(fileName, User.class, new UserExcelListener()).sheet().doRead(); } /** * 用户Excel监听器 */ private class UserExcelListener extends AnalysisEventListener<User> { /** * 每读取一行数据,就会调用该方法 */ @Override public void invoke(User user, AnalysisContext context) { userService.save(user); } /** * 读取完整个 Excel 表格后,会调用该方法 */ @Override public void doAfterAllAnalysed(AnalysisContext context) { // do nothing } } } ``` 4. 创建Excel导出器 创建一个 Excel 导出器,用于从数据库中获取数据,并将数据导出到 Excel 表格中。 ```java @Component public class ExcelWriter { @Autowired private UserService userService; /** * 将用户数据导出到 Excel 表格中 */ public void writeExcel(String fileName) { List<User> userList = userService.list(); EasyExcel.write(fileName, User.class).sheet().doWrite(userList); } } ``` 5. 创建Controller 创建一个 Controller,用于接收前端请求,并调用相应的方法处理请求。 ```java @RestController @RequestMapping("/user") public class UserController { @Autowired private ExcelReader excelReader; @Autowired private ExcelWriter excelWriter; /** * 批量导入用户数据 */ @PostMapping("/import") public void importExcel(@RequestParam("file") MultipartFile file) throws IOException { excelReader.readExcel(file.getInputStream()); } /** * 导出用户数据到Excel */ @GetMapping("/export") public void exportExcel(HttpServletResponse response) throws IOException { String fileName = "用户信息.xlsx"; response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); response.setContentType("application/vnd.ms-excel"); excelWriter.writeExcel(response.getOutputStream()); } } ``` 6. 配置文件 在 application.yml 文件中添加数据库连接信息。 ```yaml spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root mybatis-plus: mapper-locations: classpath:/mapper/*.xml type-aliases-package: com.example.demo.domain ``` 7. 测试 启动应用程序,并在浏览器中访问以下地址: - http://localhost:8080/user/export :导出 Excel 表格 - http://localhost:8080/user/import :导入 Excel 表格 以上就是 SpringBoot+Mybatis-plus整合easyExcel批量导入Excel到数据库+导出Excel 的方法了,希望能帮到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值