最近新做了一个资产管理系统,因为字段比较的多,中间会牵涉到excel导出的标题栏问题,固定资产表有120多个字段....所以在处理数据库列名和标题栏文字转换的时候,如果一个个去对应的写实在太麻烦了...就索性用了反射机制来处理,几行代码搞定
先把这个java bean贴一部分的感受下....将近400行,我用的还是getter和setter注解,里面全是一个个的参数....
下面贴下代码,file上面的就不贴了,就是个excel的文件
ExcelReader reader = ExcelUtil.getReader(file);
//将excel转为list集合
List> readAll = reader.read(5,6,Integer.MAX_VALUE);
//将差异的内容保存
ArrayList> rows = CollUtil.newArrayList(readAll);
// 通过工具类创建writer
ExcelWriter writer = ExcelUtil.getWriter(path+File.separator+"dbNoNexistent-"+nowDate+".xlsx");
//通过反射进行header处理
customDBNoNexistentHeader(writer);
// 合并单元格后的标题行,使用默认标题样式
writer.merge(rows.get(0).keySet().size()-1, "资产管理系统中不存在的资产编号");
// 一次性写出内容,使用默认样式,强制输出标题
writer.write(rows, true);
log.info("导出数据库不存在的资产编号成功===={}",fileName);
// 关闭writer,释放内存
writer.close();
private void customDBNoNexistentHeader(ExcelWriter writer) throws NoSuchFieldException {
//通过反射获取到类
Class fixedClass = FixedAssets.class;
Field[] fields = fixedClass.getDeclaredFields();
for(Field field : fields){
ApiModelProperty api = field.getAnnotation(ApiModelProperty.class);
if(null != api && null != api.value()){
writer.addHeaderAlias(field.getName(), api.value());
}
}
}