麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
1228
2023-04-17
SpringBoot+Mybatis-plus整合EasyExcel批量导入Excel到数据库+导出Excel
一、前言
今天小编带大家一起整合一下easyExcel,之所以用这个,是因为easyExcel性能比较好,不会报OOM!
市面上常见的导入导出Excel分为三种:
hutooleasyExcelpoi
hutool和easyExcel都是对poi的封装,使用起来更加方便!
二、导入依赖
小编这里是3.0.X版本的,版本不同可能导致部分有出入,如果大家版本是3.1.X,可以去官方文档看看有不一样的!
三、实体类
这里可以自带的转换器:
@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")LocalDateTimeStringConverter
或者自定义转化器:实现:implements Converter
@ExcelProperty参数注意:
这里不建议 index 和 name 同时用,要么一个对象只用index,要么一个对象只用name去匹配。
用名字去匹配,这里需要注意,如果名字重复,会导致只有一个字段读取到数据。
/** * @author wangzhenjun * @date 2022/12/2 15:52 */@Datapublic class Test { @TableId private Integer id; @ExcelProperty(index = 0) private String name; @ExcelProperty(index = 1) private Integer age; @ExcelProperty(index = 2,converter = LocalDateTimeStringConverter.class) private LocalDateTime time;}
四、编写***
注意点:这个***一定不要是单例的,被spring管理默认为单例,如果要使用@Component,一定要加上:@Scope("prototype"),这样在创建完后spring不会进行管理,每次都会是新bean!不加@Component在导入时要进行new ImportDataListener!小编这里不想new了直接这样写!!如果不想这样,可以使用构造器set进行使用!BATCH_COUNT:数据阈值,超过了就会清理list,在之前可以进行保存到数据库中,方便内存回收,防治OOM!这里保存到数据库中一般使用批量保存,不要解析到一行就去保存数据库中,这样数据量大会给数据库增加IO,导致挂掉!这里小编使用ServiceImpl的saveBatch()方法,也可以自己写一下,像小编这样写,会出现循环依赖,加上@Lazy就行!
/** * @author wangzhenjun * @date 2022/12/2 15:38 */@Slf4j@Component// 每次bean都是新的,不要单例@Scope("prototype")public class ImportDataListener implements ReadListener
五、Controller
/** * @author wangzhenjun * @date 2022/10/26 16:51 */@Slf4j@RestController@RequestMapping("/test")public class TestController { @Autowired private TestService testService; @PostMapping("/import") public Result importExcel(@RequestBody MultipartFile multipartFile){ testService.importExcel(multipartFile); return Result.success("ok"); }}
六、Service
/** * @author wangzhenjun * @date 2022/10/26 16:55 */public interface TestService extends IService
七、ServiceImpl
/** * @author wangzhenjun * @date 2022/10/26 16:56 */@Servicepublic class TestServiceImpl extends ServiceImpl
八、Mapper
/** * @author wangzhenjun * @date 2022/10/26 17:07 */public interface TestDbMapper extends BaseMapper
九、测试
准备Excel数据:
postman上传:
控制台打印:
数据库查看:
完美搞定!!
十、总结
这样就完成了easyExcel批量导入Excel到数据库,还是有很多要注意的点:
自定义转换器***不要单例保存数据库采用批量版本差距
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。