hibernate+servlet+mysql 实现easypoi_在Maven项目中使用easypoi完成Excel文件上传下载(示例代码)...
導包:
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
Title5
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我总结了70篇论文的方法,帮你透彻理解神
- 下一篇: --Redis入坑--RedisPipe