sql 使用leftjoin 也可以操作出来 但是现在我想要得是我开发轻松 不考虑性能
jeecgboot切换成微服务后 除system 服务以外 其他服务 下面得 实体类pojo 某个属性添加@Excel注解
/**人员*/
@Excel(name = "人员", dictTable = "sys_user", dicCode = "username", dicText = "realname", width = 15)
@Dict(dictTable = "sys_user", dicText = "realname", dicCode = "username")
@ApiModelProperty(value = "人员")
private java.lang.String emp;
都会出现下面情况 无法按照字典导出
最后定位到 问题 原因 org.jeecgframework.poi.excel.export.base.ExportBase 这个类下面
getExcelField方法 中 AutoPoiDictServiceI jeecgDictService 一直是null 根据他获取这个service 猜测(只是猜测)通过上下文获取 导致其他服务并没有这个东西
但是excel 导出应该是公共得 通过AutoPoi 这个excel 包实现得导出 应该是配置得问题没有找到 所需要得 service
getExcelField方法 中 AutoPoiDictServiceI jeecgDictService 一直是null
private void getExcelField(String targetId, Field field, ExcelExportEntity excelEntity, Excel excel, Class<?> pojoClass) throws Exception {
AutoPoiDictServiceI jeecgDictService = null;
try {
jeecgDictService = ApplicationContextUtil.getContext().getBean(AutoPoiDictServiceI.class);
} catch (Exception e) {
}
if(jeecgDictService!=null){
String[] dictReplace = jeecgDictService.queryDict(excel.dictTable(), excel.dicCode(), excel.dicText());
if(excelEntity.getReplace()!=null && dictReplace!=null && dictReplace.length!=0){
excelEntity.setReplace(dictReplace);
}
}
}
AutoPoiDiceServicel 直接点进去 发现是一个接口 eclipse ctrl+t 搜索 实现类 会发现只有一个并且在System 服务 下面。。。。
因为这个类没放到公共里面 所以 上下文找不到这个实现类
将这个实现类复制到你得服务中 mapper 改成你自己的 添加查询字典的sql
整好了 再次导出excel 就会发现 能按照字典导出了
还未解决的问题 他还是查了数据库 缓存字典 没有在这里面体现走缓存? 为啥不把这个放到公共下? 我翻了一下jeecgcloud 项目 发现他也没有将这个放到公共下
更新了2.3.0版本开发一段时间 发现 excel 导出 如果是 多表查询 删除某个表数据的时候 导出的数据 不是空的而是数据库的数据 这就导致我这篇文章 屁用没有
模块是框架自带的用户模块 总结 导出数据 你顶一下excel注解 告诉人家excel 标题就好 导出的对应数据还是要写sql
最后还是需要写sql 来导出 如果你使用了 他的数据字典 也要维护好 数据字典 下图是用户管理 导出数据 看到性别有个男 有个8
下图是 数据库数据 数据改变