字典映射简单方法
通过反射简单设置字典,不用每个需要用字典的地方都重新写一遍
/**
* @param dictType 字典type
* @param dictField 字典type对应字段名
* @param dictFieldName 需要填充中文的字段名
* @param <T>
*/
<T> void setDictName(T obj, String dictType, String dictField,String dictFieldName);
/**
* @param dictType 字典type
* @param dictField 字典type对应字段名
* @param dictFieldName 需要填充中文的字段名
* @param <T>
*/
@Override
public <T> void setDictName(T obj, String dictType, String dictField,String dictFieldName) {
try{
if (obj != null){
LambdaQueryWrapper<SysDictData> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysDictData::getDictType,dictType);
queryWrapper.eq(SysDictData::getStatus,"0");
Field field = obj.getClass().getDeclaredField(dictField);
Field fieldName = obj.getClass().getDeclaredField(dictFieldName);
fieldName.setAccessible(true);
field.setAccessible(true);
String fieldValue = field.get(obj).toString();
queryWrapper.eq(SysDictData::getDictValue,fieldValue);
List<SysDictData> sysDictData = this.selectDictDataByType(dictType);
SysDictData one = sysDictData.stream()
.filter(data -> "0".equals(data.getStatus()) && fieldValue.equals(data.getDictValue()))
.findFirst()
.orElse(null);
if (one != null){
fieldName.set(obj,one.getDictLabel());
}
}
}catch (Exception e){
log.error("字典映射错误,请联系管理员");
throw new RuntimeException("字典映射错误,请联系管理员");
}
}
代码结合到业务表的 大概意思差不多
下面是list版本的
/**
*
* @param list 数据list
* @param dictType 字典type
* @param dictField 字典type对应字段名
* @param dictFieldName 需要填充中文的字段名
* @param <T>
*/
@Override
public <T> void setDictNameByList(List<T> list, String dictType, String dictField,String dictFieldName) {
try{
if (!CollectionUtils.isEmpty(list)){
List<SysDictData> sysDictData = this.selectDictDataByType(dictType);
List<SysDictData> dicts = sysDictData.stream().filter(data->"0".equals(data.getStatus())).collect(Collectors.toList());
Map<String, SysDictData> collect = dicts.stream().collect(Collectors.toMap(SysDictData::getDictValue, e -> e));
for (T t : list) {
Field field = t.getClass().getDeclaredField(dictField);
Field fieldName = t.getClass().getDeclaredField(dictFieldName);
fieldName.setAccessible(true);
field.setAccessible(true);
if (collect.containsKey(field.get(t).toString())){
fieldName.set(t,collect.get(field.get(t).toString()).getDictLabel());
}
}
}
} catch (Exception e){
log.error("字典映射错误,请联系管理员");
throw new RuntimeException(e.getMessage());
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构