相比阿里巴巴的若依具有一套完善的框架,所以自然导出也是非常简单的
1.第一步还是要有vo层 query层 mapper层等等基础层
2.在controller层中,还是一样写一个接口
@PostMapping("/export")
@ApiOperation(value = "导出", produces = MediaType.APPLICATION_JSON_VALUE)
public void export(HttpServletResponse response, TestQuery query) throws UnsupportedEncodingException {
String fileName = "attachment;filename="+ URLEncoder.createDefault().encode("×××导出", Charset.forName("utf-8")) +".xls";
response.setHeader("Content-Disposition", fileName);
List<TestVo> list = testService.export(query);
ExcelUtil<TestVo> util = new ExcelUtil<>(TestVo.class);
util.exportExcel(response, list, "×××导出", "");
}
其中要注意的是,下面这一句主要是因为我的电脑导出时会自己导出txt格式,加上这一句就会导出xlsx格式,可根据自身进行判断
String fileName = "attachment;filename="+ URLEncoder.createDefault().encode("×××导出", Charset.forName("utf-8")) +".xls";
3.exportExcel也是自己封装的,可根据需要自行封装
public void exportExcel(HttpServletResponse response, List<T> list, String sheetName, String title)
{
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
this.init(list, sheetName, title, Type.EXPORT);
exportExcel(response);
}
4.进入service层,快捷键可用Alt +enter 会自动生成service层的代码
/**
* @Description: 导出
* @Param: query
*/
List<TestVo> export(TestQuery query);
5.impl层,如果你想用TestServiceUtil需要自己在工具类里建,然后写方法,如果嫌麻烦可以使用sql语句比较快且简单。
@Override
public List<TestVo> export(TestQuery query) {
QueryWrapper<Test> queryWrapper = TestServiceUtil.buildWrapper(query);
List<Test> findList = baseMapper.selectList(queryWrapper);
//添加序号
AtomicInteger index = new AtomicInteger(1);
return findList.stream().map(entity -> {
TestVo testVo = BeanUtil.copyProperties(entity, TestVo.class);
testVo.setIndex(index.getAndIncrement());
return testVo ;
}).collect(Collectors.toList());
}
6.在vo层需要导出的字段需要加注解,cellType可不加,这是规定导出的形式是数字或是字符串,如果cellType后面写错了会导致导出时没有数据
@Excel(name = "名字", cellType = Excel.ColumnType.String)
现在用postman调用,可成功。
自我感觉用若以框架写代码比较简单,第一次接触若以框架,还算是比较好上手的。但是也根据个人的喜好,写代码的风格不同,喜欢的框架也不同
共勉!