是否值50分?
----------------------
第一:如果代码类似如下
columns[int(TC_User.id)]
columns[int(TC_User.Name)]
columns[int(TC_User.Sex)]
columns[int(TC_User.Address)]
如果从持久实体直接获取,虽然有点效率,但是你可以试验一下如下查询:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='T_CRD'
以上T_CRD 是表名,你看到有一列是ORDINAL_POSITION:
这个是按照数据库设计表的自然序排列,之后你就看到,只要在设计视图中换换位置就改变了这个值。
本身在DBA优化里有一项就是数据类型同项归类提速,结果代码过于拘泥,让DBA根本不能实施这项工作。这是一方面:
--------------------------------------------------
第二:其次就是使用反射来获悉枚举列名。你可以自己试验一下:还不如最原始的if else快,性能差个几百倍。
--------------------------------------------------
第三:即使元数据析构table,也是类似如下方式,如下是linq上下文生成列的方式,使用的是特性描述,别看原始,这确是大智慧。
[Column(Storage="_RpNo", DbType="NVarChar(50) NOT NULL", CanBeNull=false)]
public string RpNo
{
get
{
return this._RpNo
}
set
{
if ((this._RpNo != value))
{
this.OnRpNoChanging(value)
this.SendPropertyChanging()
this._RpNo = value
this.SendPropertyChanged("RpNo")
this.OnRpNoChanged()
}
}
}
---------------------
第四:如果你们领导都同意用枚举来映射表,你也没必要修改,顺水推舟吧!
出错你在摆平,也让你出名一把!你自己先提前想好方案!
Hello 大家好,这里是Anyin。
在我们日常的开发工作当中,肯定会遇到类似状态、类型等字段需要以中文的形式返回给前端。例如,在数据库中性别是存储man、woman,而在前端界面显示要求是显示成男、女。
在实现以上需求会有以下几种方式
1.业务代码或者get方法中转义,即在业务代码通过判断然后转换成对应的中文或者在返回的实体类中get方法中判断返回对应的中文
2.所有的字典值入库,通过数据库left join 实现中文意思查询,返回的时候添加一个中文的字段
3.在spring mvc 返回的时候通过序列化转换,但是需要在返回的实体类添加对应的注解元数据信息
4.前端拉取所有的字典类型和对应的值,在页面渲染的时候自行处理,会在前端缓存暴露所有的字典数据
在以上4个方法中,第3种方式会比较合适,因为它会统一处理所有的字典值,并且屏蔽对业务代码的影响,同时在安全性也有一定的保证。
在实现代码之前,我们梳理下思路。
1.在spring mvc 把实体类序列化的时候我们进行一顿 *** 作
2.以对象的形式返回对应的字典信息,并且字段名不变,例如: status 字段,实体类是一个 String 类型,返回前端的时候变为一个对象: status : { code: "enable", text: "启用" }
3.通过自定义注解来指定是某个类型的字典值
4.通过 @JsonSerialize 注解指定自定义序列化器
根据以上思路,我们可以在 @JsonSerialize 注解上看到一个 using 的属性,它指定了一个 Class<? extends JsonSerializer 的类型。
所以,我们可以自己定义一个序列化器继承 JsonSerializer 类。
serialize 方法的 value 参数,就是我们需要转为字典对象的code值。但是我们还缺少一样信息,这个code值是属于那个类型的字典,是属于 sex 还是 status 类型的字典?
所以,这个类还要实现 ContextualSerializer 接口,从 BeanProperty 属性中获取对应的注解。
完整的 StringAsDictSerializer 类的代码如下:
接着再新增一个自定义注解
这个自定义注解的 type 字段即表示字典的类型,一般情况下数据库的字典字段在代码都会有一个对应的枚举类。
最后我们定义下需要返回给前端的字典对象
接下来,我们来测试下我们的代码。在 controller 返回的实体类中,我们添加上对应的注解配置,如下:
使用postman返回结果:
以上,我们实现了字典枚举值的前端字典回显,你学废了吗?
相关源码地址 Anyin Cloud[1]
[1] Anyin Cloud:https://gitee.com/anyin/anyin-cloud
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)