项目整理一:数据库设计

来源:互联网 发布:什么电台软件好听 编辑:程序博客网 时间:2024/06/06 08:51

设备管理平台,支持不同设备种类的管理,如蒸汽表、燃气表、水表等。为了满足这种需求,数据库设计时,对设备信息相关的表的属性字段采用的方式时:设置10个double column,10个int column,10个String column,5个date column,这由设备基本信息的数据类型决定的。还有一张字段映射表column_map_info_t,即对于设备信息相关的表中的各个类型字段具体表示的名称和含义进行映射说明。
如device_info_t的doubleCol1字段,在column_map_info_t这张表中通过tableName、columName和deviceType(表示不同的设备类型),就找到了device_info_t的doubleCol1的具体描述,为瞬时流量。

运用反射
通过字段名来获取get方法

界面上的组件进行配置,如报表的表头需要显示瞬时流量、压力、温度、累计流量、压差等,配置后,根据组件名称、设备类型和table_name到widget_map_info_t表中找到对应的字段描述。通过字段描述和table_name到column_map_info_t表中找到具体的字段名。取得字段名后,就可以通过反射来获得get方法,
从而去到该字段的值。
缺点:数据库设计时要预留足够字段,无疑占用了更多的空间。同时对数据库的表进行操作时,需要先查找映射表,才能得出具体的字段信息,I/O消耗增加。优点:可以对信息进行配置,支持多种设备的管理,能更好的满足客户的定制化需求。
优化:
这里用HashMap把已经获得字段名和相应的get方法的对应关系存在内存中,避免多次查询请求,减少消耗,加快速度。

public static Method getMethodByFieldName(Object obj,String filed){        Class clazz = obj.getClass();        String methodName = clazz.getName()+".get"+filed.replace(filed.substring(0, 1), filed.substring(0, 1).toUpperCase());        LogUtils.info(methodName);        if(methodHashMap.get(methodName)!=null) return methodHashMap.get(methodName);        PropertyDescriptor pd;        try {            pd = new PropertyDescriptor(filed,clazz);            Method getMethod = pd.getReadMethod();//获得get方法              methodHashMap.put(methodName, getMethod);            return getMethod;        } catch (IntrospectionException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return null;    }
原创粉丝点击