- poi官网:http://poi.apache.org
- 此讲解使用了员工数据进行演示
员工实体类
- 此演示没有使用到roles,password以及admin属性,请忽略
配置依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
前端一键导出按钮部分
- 这里样式是用了bootstrap框架,点击请求后台控制器
控制器部分
@RequiredPermission(name = "员工导出", expression = "employee:exportXls")
@RequestMapping("/exportXls")
public void exportXls(HttpServletResponse response) throws IOException {
// 文件下载的响应头(让浏览器访问资源的时候以下载的方式打开,命名下载文件名)
response.setHeader("Content-Disposition","attachment;filename=employee.xls");
Workbook wb=employeeService.exportXls();
wb.write(response.getOutputStream());
}
业务层实现方法
- 调用poi的依赖的api,先创建标题行,后再遍历创建出所有数据
public Workbook exportXls() {
// 查询所有员工信息
List<Employee> employees = employeeMapper.selectForList(new EmployeeQueryObject());
// 生成一个excel,并且返回给浏览器
Workbook wb = new HSSFWorkbook();
// 创建表格
Sheet sheet = wb.createSheet("员工通讯录");
// 创建标题行
Row row = sheet.createRow(0);
row.createCell(0).setCellValue("用户名");
row.createCell(1).setCellValue("姓名");
row.createCell(2).setCellValue("邮箱");
row.createCell(3).setCellValue("年龄");
row.createCell(4).setCellValue("部门");
for (int i = 0; i < employees.size(); i++) {
// 获取员工对象
Employee employee = employees.get(i);
// 创建行
row = sheet.createRow(i + 1);
// 创建单元格(列号)
row.createCell(0).setCellValue(employee.getUsername());
row.createCell(1).setCellValue(employee.getName());
row.createCell(2).setCellValue(employee.getEmail());
if (employee.getAge() != null) {
row.createCell(3).setCellValue(employee.getAge());
}
row.createCell(4).setCellValue(employee.getDept().getName());
}
return wb;
}
此业务层方法调用的DAO层方法解析
- 与部门多表连接,能把员工对应的部门也找出来
- 此演示并没有放过滤参数,所以可以忽略以下
<include trfid="where_sql">
信息
sql语句部分
resultMap部分
效果图
- 点击以后直接下载excel文件