日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

hibernate+servlet+mysql 实现easypoi_在Maven项目中使用easypoi完成Excel文件上传下载(示例代码)...

發(fā)布時間:2023/12/14 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate+servlet+mysql 实现easypoi_在Maven项目中使用easypoi完成Excel文件上传下载(示例代码)... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

導包:

1

2

3 cn.afterturn

4 easypoi-base

5 3.2.0

6

7

8 cn.afterturn

9 easypoi-web

10 3.2.0

11

12

13 cn.afterturn

14 easypoi-annotation

15 3.2.0

16

一:文件下載

1:前臺準備導出按鈕

1 數(shù)據(jù)導出

1.2 準備好view(beanName的視圖解析器)

在applicationContext-mvc.xml

1.3:在DownloadController完成后臺導出

/*** 導出就是下載(下載就是把一個流 從服務器端 -> 客戶端)

*

* EasypoiSingleExcelView : 注解導出的view*/@RequestMapping("/export")publicString export(EmployeeQuery query,ModelMap map, HttpServletRequest request){//根據(jù)查詢條件拿到所有數(shù)據(jù)

List list =employeeService.queryAll(query);//導出的屬性

ExportParams params = new ExportParams("員工數(shù)據(jù)", "員工表", ExcelType.XSSF);//params.setFreezeCol(2); 凍結//request:獲取到真實路徑

String realPath = request.getServletContext().getRealPath("");

System.out.println(realPath);

list.forEach(e->{

e.setHeadImage(realPath+e.getHeadImage());

});

map.put(NormalExcelConstants.DATA_LIST, list);//數(shù)據(jù)集合

map.put(NormalExcelConstants.CLASS, Employee.class);//導出實體

map.put(NormalExcelConstants.PARAMS, params);//參數(shù)

map.put(NormalExcelConstants.FILE_NAME, "employee");//文件名稱//根據(jù)返回的名稱去找一個bean對象(在SpringMVC稱之為view)///WEB-INF/views/easypoiExcelView//我們直接要文檔的的操作是沒有成功的 2.文檔的情況和我們項目中的情況有一點區(qū)別

return NormalExcelConstants.EASYPOI_EXCEL_VIEW;//View名稱 "easypoiExcelView"

}

二:上傳功能

1:配置上傳解析器注意,名字必需叫 multipartResolver

1

2

3 class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

4

5

6

7

8

9

10

2 準備導入頁面import.jsp

1

2

3

4

Title

5

6

7

8

9

10 上傳只能是post請求11 上傳必需設置 : enctype="multipart/form-data"

12 --%>

13

14

15

16 data-options="prompt:‘選擇一個文件...‘,buttonText: ‘選擇文件‘" />

17 導入

18

19

20

3: 后臺ImportController完成導入功能

1 @Controller2 @RequestMapping("/import")3 public class ImportController extendsBaseController {4

5 @Autowired6 privateIDepartmentService departmentService;7

8 @RequestMapping("/index")9 publicString index(){10 return "import";11 }12

13

14

15 /**

16 * 上傳的文件使用 MultipartFile類型來接收17 *@paramempFile18 *@return

19 */

20 @RequestMapping("/employeeXlsx")21 public String employeeXlsx(MultipartFile empFile) throwsException {22 //System.out.println(empFile);23 //System.out.println(empFile.getName());//empFile:上傳控件的名稱24 //System.out.println(empFile.getOriginalFilename());//emp-poi.xlsx:上傳文件的名稱25 //System.out.println(empFile.getContentType());//mime類型 office excel 200726 //System.out.println(empFile.getSize());//文件大小27 //我們需要拿到上傳的文件(輸入流)28 //empFile.getInputStream()29 //一.使用EasyPoi獲取文件數(shù)據(jù)30 //1.1 設置參數(shù)

31 ImportParams params = newImportParams();32 //params.setTitleRows(1);

33 params.setHeadRows(1);34 //1.2 拿到文件中的數(shù)據(jù)

35 List list =ExcelImportUtil.importExcel(empFile.getInputStream(),36 Employee.class, params);37 //二.保存員工數(shù)據(jù)

38 list.forEach(e->{39 //導入時加上一個默認密碼

40 e.setPassword("123");41 //通過部門名稱拿到部門數(shù)據(jù)(要有id)

42 Department dept =departmentService.findByName(e.getDepartment().getName());43 //把部門設置到員工數(shù)據(jù)中

44 e.setDepartment(dept);45 employeeService.save(e);46 } );47

48 return "import";49 }50

51 }

三.導入驗證功能

1 導入驗證包支持 pom.xml

1

2

3 org.hibernate

4 hibernate-validator

5 5.2.4.Final

6

2 domain中添加驗證方法

注解普通驗證

1 @Entity2 @Table(name = "employee")3 public class Employee extendsBaseDomain {4

5 @Excel(name = "用戶名")6 @NotNull(message = "用戶名不能空")7 privateString username;8 privateString password;9 @Excel(name = "年齡")10 @Max(value = 100)11 @Min(value = 18)12 privateInteger age;13 @Excel(name = "郵箱",width = 20)14 @NotNull15 privateString email;16 ...17 }

3:自定義驗證

1 實現(xiàn)IExcelVerifyHandler2

3 4

5 /**

6 * 自定義驗證(我們會在這里做唯一性的驗證)7 */

8 @Component9 public class EmployeeExcelVerifyHandler implements IExcelVerifyHandler{10

11 @Autowired12 privateIEmployeeService employeeService;13 /**

14 *15 * ExcelVerifyHandlerResult16 * suceess :代表驗證成功還是失敗(如果用戶名重復,就代表失敗)17 * msg:失敗的原因18 */

19 @Override20 publicExcelVerifyHandlerResult verifyHandler(Employee employee) {21

22 ExcelVerifyHandlerResult result = new ExcelVerifyHandlerResult(true);23 //如果根據(jù)用戶名獲取到用戶,代表這個用戶已經(jīng)存在

24 Employee tempEmp =employeeService.findByUsername(employee.getUsername());25 if(tempEmp!=null){26 result.setSuccess(false);27 result.setMsg("用戶名重復");28 }29

30 returnresult;31 }32 }

把這個類交給Spring管理(千萬不要忘了讓SpringMvc去掃描到它)

1

2

4實現(xiàn)驗證功能

@Controller

@RequestMapping("/import")public class ImportController extendsBaseController {

@AutowiredprivateIEmployeeService employeeService;

@AutowiredprivateIDepartmentService departmentService;

@AutowiredprivateEmployeeExcelVerifyHandler employeeExcelVerifyHandler;

@RequestMapping("/index")publicString index(){return "import";

}

@RequestMapping("/employeeXlsx")public String employeeXlsx(MultipartFile empFile, HttpServletResponse response) throwsException {//一.使用EasyPoi獲取文件數(shù)據(jù)

ImportParams params = newImportParams();

params.setHeadRows(1);

params.setNeedVerfiy(true); //設置驗證支持

params.setVerifyHandler(employeeExcelVerifyHandler); //設置一個驗證處理器//二.獲取excel中的數(shù)據(jù),封裝成了一個結果對象(有很多東西)

ExcelImportResult result =ExcelImportUtil.importExcelMore(

empFile.getInputStream(),

Employee.class, params);//三.獲到正確的數(shù)據(jù),并把它們保存到數(shù)據(jù)庫

List list =result.getList();

list.forEach(e->{

e.setPassword("123");

Department dept=departmentService.findByName(e.getDepartment().getName());

e.setDepartment(dept);

employeeService.save(e);

});//四.如果有錯誤,把錯誤數(shù)據(jù)返回到前臺(讓前臺下載一個錯誤的excel)//4.1判斷是否有錯誤

if(result.isVerfiyFail()){//4.2拿到錯誤的文件薄

Workbook failWorkbook =result.getFailWorkbook();//把這個文件導出

response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); //mime類型

response.setHeader("Content-disposition", "attachment;filename=error.xlsx"); //告訴瀏覽下載的是一個附件,名字叫做error.xlsx

response.setHeader("Pragma", "No-cache");//設置不要緩存

OutputStream ouputStream =response.getOutputStream();

failWorkbook.write(ouputStream);

ouputStream.flush();

ouputStream.close();

}return "import";

}

}

總結

以上是生活随笔為你收集整理的hibernate+servlet+mysql 实现easypoi_在Maven项目中使用easypoi完成Excel文件上传下载(示例代码)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。