POI导入导出【面试+工作】 1.场景一近期项目中的excel导入导出功能需求频繁的出现,趁此机会,今天笔者对POI的Excel数据的导入导出做一番详解,希望对大家有所帮助。 2.准备工作①添加POI依赖 以及excel Jar包依赖 ②自定义一个字段与属性名的excel注解 3.Excel导出 代码如下: 剖析详解: ①根据前端属性个数新建excel行数 ②根据前端具体表格进行属性名赋值 ③根据对应的属性名赋对应的值,对号入座 ④导出并下载 效果图: 4.Excel导入待导入excel文件如图: ①根据待导入的Excel自定义相应的实体,以Person为例 其中引用了Excel的自定义注解,将excel中文的字段对应数据库的属性;注意:这里的所有属性最好都定义为String类型,要不然后期的导入效果会不尽人意的。 ②PersonMapper 这里的字段类型可以不写,如果执意要写一定要跟数据库类型保持一致,有人可能会问,你刚才的Person属性都定义为String,这里又要跟数据库保持一致,不冲突么?放心,我清楚的告诉你,就该这么玩! ③数据库Person的id设备自增 ④excel导入方法 ⑤好了,直接看controller 当然,path肯定是前端传过来的参数,这里为了方便测试才写死的!一般地,前端是传文件类型给后台,末尾有正解,耐心看! 效果图: 5.实际需求补充:①待导入的Excel中的字段有可能对应数据库中的多张表,那该怎么处理呢? 1>待导入Excel文件截图 该表中的字段对应数据库中的两个表,person以及staff,另外staff中的person_id是两表连接的桥梁 person表 staff表 2>自定义接受实体类 切记,这里不要忘了申明personId,后面这个是关键 3>配置mybatis获取自增主键值 这样配置了,就可以得到该插入数据的id,测试类 效果: 好了,既然能够的得到插入数据的id,重头戏在后头 4>通过调用Excel导入方法得到对应的list,然后解析相应的字段插入到对应的表 只有person真正插入了,得到主键值才能起作用 如果涉及到更多的表插入,需要理清表与表的连接桥梁,然后在按先后顺序插入; 访问效果: person表 staff表 ②上传文件接口入参怎么申明?前端代码怎么把参数传给后台? 1>前端传给后台的是file类型 2>后台的文件上传接口必须是post请求 3>待上传的excel 4>上传结果截图 附POI导入导出工具类: 这几天在做酒店系统,里面有大量的报表需要导出(从数据库导出为Excel),另外在做测试的时候又需要往数据库里面导入很多测试数据(从Excel导入数据库),基于以上两点原因学习了POI,自己封装了两个工具类,一个导出用,一个导入用,自己测试了一下,发现效果还是蛮好的! (1)使用须知
(2)导出工具类导出工具类(从数据库导出为Excel): (3)导入工具类导入工具类(从Excel导入到数据库): (4)测试工具类使用导出工具类,把数据库数据导出到E盘的book.xls文件中: 使用导入工具类,把E盘的book.xls文件中的数据导入到数据库中: 结束语
|
|