参考博客:https://www.cnblogs.com/jpfss/p/10418873.html
参考博客:https://www.cnblogs.com/isoftware/p/3912101.html
为什么要用字典表
问题背景:
某些变量在多个地方使用,而且一般是固定的,但是随着系统升级和后期变化,可能需要改变,如果这些变量写死在代码里面将会变得难以维护,所以要将其从代码中抽离出来。
一般的业务系统客户端与用户交互的时候都会使用
下拉框
组件,对于某些比较固定的值的下拉组件的数据来源一般都是比较固定的一类数值。
例子:省份--省份编码 对应关系;设备名称--设备编码 对应关系。
实现方法对比:
- 枚举类、Constant常量类——在数据少的情况下适用,缺点是字段变化时需要修改源码,不方便维护。
- 配置数据库字典表——可以在不用修改代码的情况下修改配置。缺点是存在频繁访问数据库的问题,为了避免这种情况,通常会加缓存,降低访问数据库的频率。
- 配置在 xml/properties 文件中,服务启动时加载入内存。
字典表的实现
应用举例。
假定做一个学生信息管理系统
字典类型表设计如下(Dic_Type):
ID | Name |
---|---|
1 | Sex |
2 | ... |
字典内容表设计如下(Dic_Data):
ATID | TypeID | ID | Name |
---|---|---|---|
1 | 1 | 1 | 男 |
2 | 1 | 2 | 女 |
3 | 2 | 1 | ... |
4 | 2 | 2 | ... |
... | ... | ... | ... |
性别类型字典的视图(VW_Sex):
select ID,Name from Dic_Data where TypeID=1
假设学生信息表如下T_Student:
ID | Name | Sex |
---|---|---|
1 | 采采 | 1 |
2 | 花花 | 2 |
3 | 刚刚 | 1 |
取学生列表信息可通过如下方法实现:
select T_Student.ID as StudentID,T_Student.Name as StudentName,VW_Sex.Name as SexName
from T_Student left join VW_Sex on T_Student.Sex=VW_Sex.ID
结果如下:
StudentID | StudentName | SexName |
---|---|---|
1 | 采采 | 男 |
2 | 花花 | 女 |
3 | 刚刚 | 男 |