创建一个字典项的annotation注解
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DictsValue {
String value() default "";
}
在需要用上字典项的实体类的属性上加上注解
@DictsValue("color")
private String gcolor;
字典项的service层,用于处理对象中的字典数字转换为字典表中存的数据
@Override
public void caseDictCode2Label(List datas) throws Exception {
for (Object data : datas) {
Class<?> clz = data.getClass();
Field[] fields = clz.getDeclaredFields();//[gid,gname,gcolor,gprice]
//遍历对象中的所有成员变量
for (Field field : fields) {
//这里说明变量上有DictsValue注解,该变量需要转译
//由于成员变量是private修饰,不能通过反射来修改成员变量的值,.setAccessible(true)使field可以被直接修改
field.setAccessible(true);
//判断成员变量上有没有DictsValue注解
DictsValue dv = field.getAnnotation(DictsValue.class);
if(dv==null)
continue;
//得到变量上的DictsValue注解的value属性值
String dtype = dv.value();//color
//得到data对象中的feild的值
String dcode = (String)field.get(data);//1
//去字典表中根据dtype和dcode得到一个字典对象
Sysdicts d = getSysdictsByTypeAndCode(dtype,dcode);
//拿到需要转译的汉字值
String dname = d.getDname();//红色
//对成员变量进行转移重新赋值
field.set(data,dname);
}
}
}
@Override
public Sysdicts getSysdictsByTypeAndCode(String dtype, String dcode) {
//去字典表中根据dtype和dcode得到一个字典对象
Sysdicts result= dm.selectDicts(dtype,dcode);
return result;
}
调用字典项的service
@Override
public List<Goods> selectGoods(Goods g) throws Exception {
//从数据库中查询需要通过字典项转换的数据
List<Goods> goodsList = gm.selectGoods(g);
//字典项的转译工作
ds.caseDictCode2Label(goodsList);
return goodsList;
}