鉴于工作需要大数据量(一般10w左右,或者更多数据量)的excel导出功能,由于现有项目中的 XSSFWorkbook包陈旧、以及jackson封装的数据转化不够高效,所以做了一些修改,优化sql查询和数据处理,基本满足导出秒级实现。
直接上代码了(demo)
1.HTML demo
var data = {
"sfzh" : $("#jsycx_sfzh").val(),
"cph" : $("#jsycx_cph option:selected").html()||"全部",
"xm" : $("#jsycx_xm").val(),
"gsm" : $("#jsycx_gsm option:selected").html()||"全部",
"fwzh" : $("#jsycx_fwzh").val(),
"jyxkz" : $("#jsycx_jyxkz").val(),
"city" : $("#jsycx_city option:selected").html()};
url = "../../tjfx/jsycxxlsx?data=" + JSON.stringify(data) , window.open(url)
HTML页面的处理比较简单,直接就是打开新的页面就行,请求带上需要的参数。
2.Controller demo
/**
* 驾驶员导出
* @param request
* @param data
* @param response
* @return
* @throws IOException
*/
@RequestMapping("/jsycxxlsx")
@ResponseBody
public String jsycxxlsx(HttpServletRequest request,
@RequestParam("data") String data, HttpServletResponse response) throws IOException {
Map<String, Object> paramMap = FastJsonUtil.stringToMap(data);
String sfzh = String.valueOf(paramMap.get("sfzh"));
String cph = String.valueOf(paramMap.get("cph"));
String xm = String.valueOf(paramMap.get("xm"));
String gsm = String.valueOf(paramMap.get("gsm"));
String fwzh = String.valueOf(paramMap.get("fwzh"));
String jyxkz = String.valueOf(paramMap.get("jyxkz"));
String city = String.valueOf(paramMap.get("city"));
String a[] = { "身份证号", "姓名", "业户名称","经营许可证号", "服务证号", "车牌号", "资格证有效期止","分值","证照状态" };// 导出列明
String b[] = { "ID_NUMBER", "NAME", "COMPANY_NAME","COMPANY_LICENSE_NUMBER", "VEHICLE_ID", "PLATE_NUMBER", "VALID_PERIOD_END","ASSESS_SCORE","STATUS_NAME" };// 导出map中的key
String gzb = "驾驶员信息";// 导出sheet名和导出的文件名
String msg = tjfxService.jsycxxlsx(sfzh, cph, xm, gsm,fwzh,jyxkz,city);
List<Map<String, Object>> list = DownloadAct.strlist(msg);// 导出的数据
downloadAct.download(request, response, a, b, gzb, list);
return null;
}
Controller主要是设置表名 列名 列参数 以及FastJsonUtil解析request参数进行sql查询,具体的sql执行方法就不贴了这个,最后返回的是封装好的FastJsonUtil的Json字符串msg。
3.DownloadAct.strlist方法 demo
/**
* json字符串转换成List<Map>集合
* json字符串格式 [{a:null,b:null}]
* @return
* @author erxi
* @date : 2018年12月3日 下午2:22:40
*/
public static List<Map<String, Object>> strlist(String jsonString) {
List<Map<String, Object>> list = null;
try {
list = JSON.parseObject(jsonString, new TypeReference<List<Map<String, Object>>>() {});
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
这是FastJsonUtil封装类中的其中一个json字符串转成List<Map>集合的格式,后面会贴出自己封装的FastJsonUtil类。
4.downloadAct.download方法 demo
/**
* demo返回http响应
* @param request
* @param response
* @param a
* @param b
* @param gzb
* @param list
* @return
* @throws IOEx