<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
poi的解析方式是dom解析,把結果一次都讀入記憶體操作,這樣的操作平時是不會有問題的,但是並行量上來的時候就會出現OOM,EasyExcel,底層物件其實還是使用poi包的那一套。它只是將poi包的一部分抽了出來,摒棄掉了大部分業務相關的屬性。由於它關注的業務是匯入匯出這一塊,所以在處理巨量資料量的匯入匯出能夠通過本地快取來避免OOM,在特定場景中,EasyExcel的表現能力還是可以的。
<!-- EasyExcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.0-beta2</version> </dependency>
再試下匯入匯出功能前,寫批次插入資料的介面和查詢資料的介面。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="cn.demo.mapper.MedicnesMapper"> <insert id="saveMedicnesList" parameterType="cn.demo.entity.Medicnes"> insert into medices (food,remark) values <foreach collection="list" item="rm" separator=","> (#{rm.food},#{rm.remark}) </foreach> </insert> <select id="medicnesList" parameterType="cn.demo.entity.Medicnes" resultType="cn.demo.entity.Medicnes"> SELECT food, remark FROM medices </select> </mapper>
package cn.demo.entity; import com.alibaba.excel.annotation.ExcelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Medicnes { @ExcelProperty("食物名稱") private String food; @ExcelProperty("食物產地") private String remark; }
package cn.demo.config; import cn.demo.entity.Medicnes; import cn.demo.service.EmpService; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; import java.util.List; /** * 有個很重要的點 ExcelListener * 不能被spring管理,要每次讀取excel都要new,然後裡面用到spring可以構造方法傳進去 */ public class ExcelListener extends AnalysisEventListener<Medicnes> { private List<Medicnes> list = new ArrayList<>(); //每隔5條儲存資料庫,實際使用中可以3000條,然後清理list ,方便記憶體回收 private static final int BATCH_COUNT = 5; //假設這個是一個DAO,當然有業務邏輯這個也可以是一個service。當然如果不用儲存這個物件用 @Autowired private EmpService empService; /** * 如果使用了spring,請使用這個構造方法。 * 每次建立Listener的時候需要把spring管理的類傳進來 */ public ExcelListener(EmpService empService) { this.empService = empService; } /** * 這個每一條資料解析都會來呼叫 */ @Override public void invoke(Medicnes goods, AnalysisContext analysisContext) { System.out.println("解析到一條資料:========================"+goods.toString()); // 資料儲存到data,供批次處理或後續自己業務邏輯處理。 list.add(goods); // 達到BATCH_COUNT了,需要去儲存一次資料庫,防止資料幾萬條資料在記憶體,容易OOM if(list.size() >= BATCH_COUNT){ saveData(); // 儲存完成清理data list.clear(); } } /** * 所有資料解析完成了 都會來呼叫 */ @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { //確保所有資料都能入庫 saveData(); } /** * 加上儲存資料庫 */ private void saveData() { System.out.println("=============================="+list.size()+"條資料,開始儲存到資料庫"); empService.saveMedicnesList(list); } }
接下來編寫我們的工具類--幫助我們來實現下載excel
public class DownExcel { public static void download(HttpServletResponse response, Class t, List list) throws IOException, IllegalAccessException,InstantiationException { response.setContentType("application/vnd.ms-excel");// 設定文字內省 response.setCharacterEncoding("utf-8");// 設定字元編碼 response.setHeader("Content-disposition", "attachment;filename=demo.xlsx"); // 設定響應頭 EasyExcel.write(response.getOutputStream(), t).sheet("模板").doWrite(list); //用io流來寫入資料 } } //匯出為Excel @RequestMapping("/downloadexcel.do") public void getExcel(HttpServletResponse response) throws IllegalAccessException, IOException, InstantiationException { List<Medicnes> list = sysUserService.medicnesList(); DownExcel.download(response,Medicnes.class,list); }
//匯入Excel @RequestMapping("/importexcel.do") @ResponseBody public String importexcel(@RequestParam(value = "excelFile") MultipartFile file) throws IOException{ EasyExcel.read(file.getInputStream(), Medicnes.class, new ExcelListener(sysUserService)).sheet().doRead(); return "success"; }
到此這篇關於java利用easyexcel實現匯入與匯出功能的文章就介紹到這了,更多相關java easyexce 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45