网名转换器(个性网名生成器)

背景结果数据转换:1.场景:数据库表存储关联表的ID,如创建者ID、机构ID、部门ID等。,而前端显示需要名称。为了演示起见,通过关联表查询姓名是正常的,但这可

背景

结果数据转换:

1.场景:数据库表存储关联表的ID,如创建者ID、机构ID、部门ID等。,而前端显示需要名称。为了演示起见,通过关联表查询姓名是正常的,但这可能会导致查询执行效率低下和SQL复杂,而且还需要定义姓名字段来存储姓名。

2.策略:数据库表仍然存储关联表的ID,但是字段类型被定义为字符串类型(为代码生成器生成一个字符串类型字段)。服务层对外提供的ID查询结果是统一的。如果需要显示,会通过DataConverter在控制器中转换成名称,返回前端显示。

3.查询结果对象是POJO(DTO \ VO \实体)。如果定义了name字段(name字段必须以Name结尾,如userid-“username,org-” orgName),那么这个名称将通过反射存储在Name字段中。如果没有定义名称字段,ID字段将被直接覆盖。

4.如果查询结果对象是Map,则增加一个新的name字段(name字段应以name结尾,如userid-“username,org-” orgName),Name存储在Name字段中,不会覆盖id字段。

5.DataConverter调用关联表的服务查询名称,并缓存它以提供转换效率。

调用方法

//转换分页对象数据data converter . to name(datatype . user _ nick _ name,page);//转换单个对象data converter . to name(datatype . user _ nick _ name,obj);//转换集合对象data converter . to name(datatype . user _ nick _ name,list);其中,DataType是支持的数据类型(详见源代码)。如果不满足默认的转换字段,请调用以下代码以供临时使用,并请联系管理员将更常用的字段添加到数据类型配置中。

网名转换器(个性网名生成器)插图

数据字典转换

对于sql查询语句,应在要转换的字典值之前添加字典代码,如下例所示(其中yes_no,user_type是字典代码):

选择串联(& # 39;是_否& # 39;,'-',t.status),concat(& # 39;user _ type & # 39,'-',t.type)从用户t转换调用,示例如下(其中状态和类型是要转换的字段):

DataConverter.toName(数据类型。YAOXIE_DICT_ITEM,& # 34;状态& # 34;,"类型& # 34;);实现DataConverter:结果数据转换器。

包com . shusi . converter;导入cn . Hu tool . core . util . reflect util;导入com . baomi dou . mybatisplus . extension . plugins . pagination . page;导入com . shusi . domain . dto . option dto;导入com . shusi . redis . redis util;导入com . shusi . util . data util;导入com . shusi . util . spring context holder;导入com . shusi . util . stru til;导入lombok . extern . SLF 4j . SLF 4j;导入Java . util . arrays;导入Java . util . hashmap;导入Java . util . list;导入Java . util . map;/* * *结果数据转换器* * @作者:Lincl * @ Date:2019/2/28 16:11 */@ sl F4 j public类数据转换器{/* * *什么是最大缓存*/Private Final Static int max _ size = 10000;/* * * redis */private static redistutil redistutil;/* * * initialize */public static void init(){//initialize获取bean if(redis util = = null){ redis util = springcontextholder . get bean(redis util . class);} }/* * * Get name * * @ param datatype * @ paramid * @ return */public static string getname(datatype datatype,string id){//init init();列表& lt字符串& gtidList = StrUtil.split(id,& # 39;,');//查询结果列表< String & gtresult = redistutil . getitemlistofmap(datatype . getcache prefix(),id list);//如果请求服务后仍然没有数据,返回id If(result = = null){ return id;} return strutil . join(& # 34;,",结果);}/* * *更新缓存* * @param dataType数据类型* @param list数据集*/public static void set name(dataType数据类型,list < OptionDTO & gtList) {//初始化init();地图& ltString,String & gtmap = new HashMap & lt& gt(list . size());for(option dto item:list){ map . put(item . getvalue()、item . get label());}//更新缓存redistutil . set map(datatype . getcache prefix(),map);log . info(& # 34;{} '缓存设置成功!{}共数据!",dataType.getType(),list . size());}/* * * Update name * * @ param dataType数据类型* @ paramid * @ param name name */public static void up dname(dataType,string id,string name){//init();//更新缓存redis util . setitemofmap(datatype . getcacheprefix(),id,name);}/* * *删除名称* * @param数据类型数据类型* @ paramids */public static void delname(数据类型数据类型,字符串…ids){//初始化init();redistutil . delitemofmap(datatype . getcache prefix()、arrays . aslist(ids));}/* * *单个对象转换* * @param dataType数据类型* @param obj数据对象* @ param < T & gt* @ return */public static & lt;T & gtT toName(DataType数据类型,T obj){ return data converter . to name(数据类型,obj,null);}/* * *设置转换* * @param list数据集* @ param < T & gt* @ return */public static & lt;T & gt列表& ltT & gttoName(DataType数据类型,List & ltT & gtlist){ return data converter . to name(数据类型,列表,null);}/* * *分页对象转换* * @ param page * @ return */public static pagetoname(datatype数据类型,page page page){ return data converter . to name(数据类型,page,null);}/* * *单个对象转换* * @param dataType数据类型* @param obj数据对象* @param fieldNames转换字段名称* @ param < T & gt* @ return */public static & lt;T & gtT toName(数据类型DataType,T obj,String[]field names){ if(obj = = null){ return null;}//默认转换字段if(data util . isempty(field names)){ field names = datatype . getfield names();} if(data util . isnotempty(field names)){ for(int I = 0;我& lt字段名.长度;i++){ String field name = field names[I];//存储名称字符串标签field = field name . replace(& # 34;Id & # 34, "") + "姓名& # 34;;try {//Map object if(Map的obj实例){if ((map) obj)。get (fieldname)!= null) { String userId = ((Map) obj)。get(field name)+& # 34;";string nickName = data converter . getname(dataType,userId);((地图)obj)。put(labelField,昵称);} } else { Class clz = obj . getclass();if (ReflectUtil.hasField(clz,field name)){ String id =(String)reflect util . getfield value(obj,field name);if(strutil . isnotblank(id)){ String nickName = data converter . getname(dataType,id);If (reflectutil.hasfield (clz,labelfield)){//定义一个附加字段来存储名称reflectutil.setfieldvalue (obj,label field,nickname);} else { reflect util . setfield value(obj,fieldName,nickName);} } } } } catch(异常e) { log.error(e.getMessage(),e);} } }返回obj}/* * *设置转换* * @param list数据集* @param fieldNames字段名* @ param < T & gt* @ return */public static & lt;T & gt列表& ltT & gttoName(DataType数据类型,List & ltT & gtlist,String[] fieldNames) { if (list!= null & & list . size()& gt;0){ for(int I = 0;我& ltlist . size();i++){ data converter . to name(dataType,list.get(i),field names);} }返回列表;}/* * *分页对象转换* * @param page * @param fieldNames字段名* @ return */public static pagename(datatype数据类型,page page page,string[]field names){ if(page . get records()!= null && page.getRecords()。size()& gt;0){ data converter . to name(dataType,page.getRecords(),field names);}返回页面;} }数据类型:数据类型

package com.shusi.convertor;/** * 数据类型枚举类 * * @author lincl */public enum DataType { /** * 用户账号昵称,默认转换字段:"createBy", "updateBy", "operator", "orderUserId", "pushUserId" */ USER_NICK_NAME("用户账号昵称", "userId", "createBy", "updateBy", "operator", "orderUserId", "pushUserId", "returnUserId", "optionUserId", "sendUserId", "receiveUserId", "receiveUserIds"), /** * 机构名称,默认转换字段:"orgId", "hospitalOrgId" */ ORG_NAME("机构名称", "orgId","reqOrgId", "userBuyerId", "userSupplierId"), /** * 厂家名称,默认转换字段:"factoryId" */ FACTORY_NAME("厂家名称", "factoryId", "factory", "userFactoryId"), /** * 部门名称,默认转换字段:"deptId" */ DEPT_NAME("部门名称", "deptId", "departmentId"), /** * 部门合并名称,默认转换字段:"deptMergeId" */ DEPT_MERGE_NAME("部门合并名称", "deptMergeId", "deptId", "departmentId"), /** * 行政区域名称 */ REGION_NAME("行政区域名称", "province", "city", "district", "region", "provinceId", "cityId", "districtId"), /** * 药械网:数据字典 */ YAOXIE_DICT_ITEM("数据字典", null), /** * 统一认证:数据字典 */ AUTH_DICT_ITEM("数据字典", null), /** * 权限名称 */ PERMISSION("权限名称", "permissionId"); /** * 类型 */ private String type; /** * 默认转换字段 */ private String[] fieldNames; DataType(String type, String… fieldNames) { this.type = type; this.fieldNames = fieldNames; } /** * 获取数据类型 * * @return */ public String getType() { return type; } /** * 获取默认转换字段 * * @return */ public String[] getFieldNames() { return fieldNames; } /** * 获取缓存前缀 * * @return */ public String getCachePrefix() { return "ID_NAME:" + this.name(); }}

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/194002.html

发表回复

登录后才能评论