31 个解决方案
#1
大神在哪,呼叫中
#2
另外再维护一个民族的码表,把编号和名字记录下来;用的时候关联查询这个码表,方便后期维护吧,比如新增一个人,民族从这个码表里选择
#3
在数据库设计方面,建议用编码,将来无论排序、查找还是统计数字都优于文本。
#4
我是习惯以code方式存的
具体说不清 但是 感觉应该是这样的
code拿出来 以字典表的方式 得到翻译 然后显示出来 就比如说 名族 code 为01 在字典表中汉族
另一个是绑定方便 例如 中国少数名族 美国名族等。
比如一张表
dict_code index dict_name
1 china
2 usa
11 1 han
12 1 miao
21 2 Hispanics
22 2 Cherokee
而code 也就是你说的编码 不是可以和index 做关联吗!?
这样我们一张表可以做很多事情
假如说客户先选中编码 1 也就是中国 那么自动把中国名族都搞出来 之后放到下拉框 让客户去选择
select * from table a where 1=1 and a.dict_code = a.index
你感觉这样不方便吗
具体说不清 但是 感觉应该是这样的
code拿出来 以字典表的方式 得到翻译 然后显示出来 就比如说 名族 code 为01 在字典表中汉族
另一个是绑定方便 例如 中国少数名族 美国名族等。
比如一张表
dict_code index dict_name
1 china
2 usa
11 1 han
12 1 miao
21 2 Hispanics
22 2 Cherokee
而code 也就是你说的编码 不是可以和index 做关联吗!?
这样我们一张表可以做很多事情
假如说客户先选中编码 1 也就是中国 那么自动把中国名族都搞出来 之后放到下拉框 让客户去选择
select * from table a where 1=1 and a.dict_code = a.index
你感觉这样不方便吗
#5
上面sql 有问题
select a.dict_code from table a where 1=1 and a.dict_code = a.index and dict_code = 1;
这样简单速度 效率 很快把中国少数名族都拿出来 而且全部在一张表
select a.dict_code from table a where 1=1 and a.dict_code = a.index and dict_code = 1;
这样简单速度 效率 很快把中国少数名族都拿出来 而且全部在一张表
#6
所有说你可能走入了一个误区
一张表 不可能只为了一个字段去做事
所有我们会考虑很多情况
比如 我现在让你建一张表
中国所有的城市
一个城市所有的区域
一个区域所有的商圈
你会怎么去做!?
那么首先 我们要考虑怎么去建表!?
如果是我,因为只能搞一张表 。所以我会这么做,只给你做参考用
table:`dict_master`
colunm:
id
dict_type
dict_type_desc
dict_code
dict_code_desc
index_code
created_ts
updated_ts
id 这个不用说 了
dict_type 我是用来区分 城市区域商圈 类型的 以后可以再扩展
dict_code 就是编号
index_code 做关联用的
那么表好了以后差不多是这个样子的
id dict_type dict_type_desc dict_code dict_code_desc index_code created_ts updated_ts
1 CITY 城市 SH 上海 0000-00-00 00:00:00 0000-00-00 00:00:00
2 DISTRICT 区域 PT 普陀 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
3 DISTRICT 区域 JA 静安 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
4 DISTRICT 区域 YP 杨浦 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
5 DISTRICT 区域 HK 虹口 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
6 DISTRICT 区域 PD 浦东 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
7 DISTRICT 区域 BS 宝山 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
8 DISTRICT 区域 ZB 闸北 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
9 CIRCLE 商圈 YPGY 杨浦公园 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
10 CIRCLE 商圈 KJ 控江 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
11 CIRCLE 商圈 AS 鞍山 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
12 CIRCLE 商圈 WJC 五角场 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
13 CIRCLE 商圈 LXGY 鲁迅公园 HK 0000-00-00 00:00:00 0000-00-00 00:00:00
14 CIRCLE 商圈 SCBL 四川北路 HK 0000-00-00 00:00:00 0000-00-00 00:00:00
一张表 不可能只为了一个字段去做事
所有我们会考虑很多情况
比如 我现在让你建一张表
中国所有的城市
一个城市所有的区域
一个区域所有的商圈
你会怎么去做!?
那么首先 我们要考虑怎么去建表!?
如果是我,因为只能搞一张表 。所以我会这么做,只给你做参考用
table:`dict_master`
colunm:
id
dict_type
dict_type_desc
dict_code
dict_code_desc
index_code
created_ts
updated_ts
id 这个不用说 了
dict_type 我是用来区分 城市区域商圈 类型的 以后可以再扩展
dict_code 就是编号
index_code 做关联用的
那么表好了以后差不多是这个样子的
id dict_type dict_type_desc dict_code dict_code_desc index_code created_ts updated_ts
1 CITY 城市 SH 上海 0000-00-00 00:00:00 0000-00-00 00:00:00
2 DISTRICT 区域 PT 普陀 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
3 DISTRICT 区域 JA 静安 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
4 DISTRICT 区域 YP 杨浦 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
5 DISTRICT 区域 HK 虹口 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
6 DISTRICT 区域 PD 浦东 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
7 DISTRICT 区域 BS 宝山 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
8 DISTRICT 区域 ZB 闸北 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
9 CIRCLE 商圈 YPGY 杨浦公园 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
10 CIRCLE 商圈 KJ 控江 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
11 CIRCLE 商圈 AS 鞍山 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
12 CIRCLE 商圈 WJC 五角场 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
13 CIRCLE 商圈 LXGY 鲁迅公园 HK 0000-00-00 00:00:00 0000-00-00 00:00:00
14 CIRCLE 商圈 SCBL 四川北路 HK 0000-00-00 00:00:00 0000-00-00 00:00:00
#7
我认为直接存值比较好,方便一目了然,弄个数字感觉故弄玄虚
#8
如果直接存值,汉族改成了水族,你得用update语句来修改,如果数据量上亿的话需要花费的时间比较长,用数字编号则可只改一个地方就完成这个变动带来的影响。只是举个例子,名族当然肯定不会轻易改动的,还有一点汉字占空间比较大,如果说你的数据量不大的话,可以直接存值,否则就用编号。
#9
这样的东西,一般会存在字典表里
data_code,data_name,type_id
data_code,data_name,type_id
#10
如果以上这种形式 我们就可以好做很多了
List<DISTRICT> dcList = session.createSqlQuery("select dm from dict_master dm where 1=1 and dm.index_code = 'SH'");
for(DISTRICT dc : dcList) {
System.out.println("区域 : "+dc.dictCodeDesc);
}
List<DISTRICT> dcList = session.createSqlQuery("select dm from dict_master dm where 1=1 and dm.index_code = 'SH'");
for(DISTRICT dc : dcList) {
System.out.println("区域 : "+dc.dictCodeDesc);
}
#11
//上海的所有区域拿出来了
List<DictMaster> dcList = session.createSqlQuery("select dm from dict_master dm where 1=1 and dm.index_code = 'SH'");
for(DictMaster dc : dcList) {
System.out.println("区域 : "+dc.dictCodeDesc);
}
// 杨浦所有商圈拿出来了
List<DictMaster> dcList = session.createSqlQuery("select dm from dict_master dm where 1=1 and dm.index_code = 'YP'");
for(DictMaster dc : dcList) {
System.out.println("商圈 : "+dc.dictCodeDesc);
}
#12
public class DictMaster() {
private int id;
private String dictType;
private String dictTypeDesc;
private String dictCode;
private String dictCodeDesc;
private String indexCode;
private Date createdTs;
private Date updatedTs;
public DictMaster() {
}
// generate getters,settes(id,dictType,dictTypeDesc,dictCode,dictCodeDesc,indexCode,createdTs,updatedTs) ....
}
//上海的所有区域拿出来了
List<DictMaster> districtDictList= session.createSqlQuery("select dm from dict_master dm where 1=1 and dm.index_code = 'SH'");
request.setAttribute("districtDictList",districtDictList);
// 杨浦所有商圈拿出来了
List<DictMaster> circleDictList= session.createSqlQuery("select dm from dict_master dm where 1=1 and dm.index_code = 'YP'");
request.setAttribute("circleDictList",circleDictList);
#13
但是这样有个问题啊,假如我取很多数据,那我怎么把编码转化为值啊,这样的字段如果很多,转换的效率不是很低吗?
#14
就是我假如有一个person表,有很多字段,都是用这种编码的形式,比如民族用编码 性别01代表男性,02代表女性,工作性质01代表工人,02代表农民,03代表官员,到时候我再前台显示的时候怎么把性别的01转换为男性,工作性质的01转换为工人呢,这样不是要很多表一起查吗,数据如果很多的话 这样多表效率不会很低吗?
#15
一般用代码来被引用,描述本身可能会变更或翻译成多种语言。当然我们也可以把汉语名称本身当代码,以后翻译直接再给另一个英文或繁体描述。代码本身代表着逻辑方面,而名称仅是给“眼睛”看的,名称可能修改或翻译。
我们之所以用多个表,主要是基于关系型数据库中的消除数据重复,相信我们以前考试时都回答过这道题。
如果本身它被使用到的场合很少,那重复的情况也就不是什么大问题,直接用名称也没什么问题。
我们之所以用多个表,主要是基于关系型数据库中的消除数据重复,相信我们以前考试时都回答过这道题。
如果本身它被使用到的场合很少,那重复的情况也就不是什么大问题,直接用名称也没什么问题。
#16
如果以后做多语言的版本呢。
#17
用hql语言取
#18
可以弄个码表,把对应的编码和汉字写入码表。
#19
假如有一个person表,有很多字段,都是用这种编码的形式,比如民族用编码 性别01代表男性,02代表女性,工作性质01代表工人,02代表农民,03代表官员,到时候我再前台显示的时候怎么把性别的01转换为男性,工作性质的01转换为工人呢,这样不是要很多表一起查吗,数据如果很多的话 这样多表效率不会很低吗?
首先 等于2个sql 虽然一句也可以写完 但其实操作是2个 对吧
1.先把你说的找出阿里 在修改:
String sql = "select p from Person p where 1=1 and a.sex = '01' and a.work_type = '01' " ;
List<Person> pList = session.createQuery(hql);
// 如果翻译 这你自己要写个字典表了
比如:
public class Person {
...
private Sex sex;
private WorkType workType;
...
...
public void setWorkType(String workType) {
this.workType = new WorkType (workType);
}
public void setSex(String sex) {
this.sex = new Sex(sex);
}
public WorkType getWorkType() {
return this.workType ;
}
public Sex getSex(){
return this.sex;
}
...
}
public class Sex {
String male = "01";
String female = "02";
public sex(String sex){
if(male.eques(sex)) {
.....
}
}
}
更直接 用枚举
work type 也是如此 第一次搞肯定很麻烦 以后用的话 你说那个方便吗 。
就像页面跳出来code 一样 404 400 500 这种
#20
假如有一个person表,有很多字段,都是用这种编码的形式,比如民族用编码 性别01代表男性,02代表女性,工作性质01代表工人,02代表农民,03代表官员,到时候我再前台显示的时候怎么把性别的01转换为男性,工作性质的01转换为工人呢,这样不是要很多表一起查吗,数据如果很多的话 这样多表效率不会很低吗?
首先 等于2个sql 虽然一句也可以写完 但其实操作是2个 对吧
1.先把你说的找出阿里 在修改:
String sql = "select p from Person p where 1=1 and a.sex = '01' and a.work_type = '01' " ;
List<Person> pList = session.createQuery(hql);
// 如果翻译 这你自己要写个字典表了
比如:
public class Person {
...
private Sex sex;
private WorkType workType;
...
...
public void setWorkType(String workType) {
this.workType = new WorkType (workType);
}
public void setSex(String sex) {
this.sex = new Sex(sex);
}
public WorkType getWorkType() {
return this.workType ;
}
public Sex getSex(){
return this.sex;
}
...
}
public class Sex {
String male = "01";
String female = "02";
public sex(String sex){
if(male.eques(sex)) {
.....
}
}
}
更直接 用枚举
work type 也是如此 第一次搞肯定很麻烦 以后用的话 你说那个方便吗 。
就像页面跳出来code 一样 404 400 500 这种
这里其实就是一个问题,取的问题,比如按照你上面的表设计,不是要join很多表来去编码对应的值吗,你下面的那种用常量在java中我用过,我就是想知道在数据库中怎么把编码转值啊!
#21
比如我要去1000条人的数据,如果不把数据字典缓存在内存中,这样查询的时候不是效率很低吗,我设置这样编码的字段有十个,那这个hql怎么写啊!
#22
假如有一个person表,有很多字段,都是用这种编码的形式,比如民族用编码 性别01代表男性,02代表女性,工作性质01代表工人,02代表农民,03代表官员,到时候我再前台显示的时候怎么把性别的01转换为男性,工作性质的01转换为工人呢,这样不是要很多表一起查吗,数据如果很多的话 这样多表效率不会很低吗?
首先 等于2个sql 虽然一句也可以写完 但其实操作是2个 对吧
1.先把你说的找出阿里 在修改:
String sql = "select p from Person p where 1=1 and a.sex = '01' and a.work_type = '01' " ;
List<Person> pList = session.createQuery(hql);
// 如果翻译 这你自己要写个字典表了
比如:
public class Person {
...
private Sex sex;
private WorkType workType;
...
...
public void setWorkType(String workType) {
this.workType = new WorkType (workType);
}
public void setSex(String sex) {
this.sex = new Sex(sex);
}
public WorkType getWorkType() {
return this.workType ;
}
public Sex getSex(){
return this.sex;
}
...
}
public class Sex {
String male = "01";
String female = "02";
public sex(String sex){
if(male.eques(sex)) {
.....
}
}
}
更直接 用枚举
work type 也是如此 第一次搞肯定很麻烦 以后用的话 你说那个方便吗 。
就像页面跳出来code 一样 404 400 500 这种
你这样不是每次查询还要去查字典表啊?
#23
我们也转么写个constent 用来搞 字典表
public class Constant {
/*
*SEXTYPE 性别类型
*/
public static enum SEXTYPE {
MALE("01"), // 男性
FEMALE("11"), // 女性
;
private SEXTYPE (String type) {}
}
/*
*WORKTYPE 职业类型
*/
public static enum WORKTYPE {
WORKER("01"), // 工人
FARMER("02"), // 农民
OFFICIAL("03"), // 官员
;
private WORKTYPE (String type) {}
}
}
#24
顶啊 ,这个用数据字典除了灵活,再取的时候怎么更方便的把编码转换为值啊,比如我要显示100条数据,我怎么把编码转换为值,是在服务启动的时候就把数据字典读到内存中,然后把编码和值进行转换,还有个问题是多个属性的字典是放在一张表中,然后形成一个Map<id,map<id,name>>这种数据结构吗?
#25
顶啊 ,这个用数据字典除了灵活,再取的时候怎么更方便的把编码转换为值啊,比如我要显示100条数据,我怎么把编码转换为值,是在服务启动的时候就把数据字典读到内存中,然后把编码和值进行转换,还有个问题是多个属性的字典是放在一张表中,然后形成一个Map<id,map<id,name>>这种数据结构吗?
1、可以不用什么字典表,可以直接在代码里用if判断,if(x==1){person.setMinZu("汉族")},判断56个名族,提炼成一个方法,传编号进去,返回民族,或者用switch也可以
2、写一个xml文件,存储56个民族和编号,加载服务器的时候读取到一个静态的Map中,然后代码就可以这样判断
person.setMinZu(map.get(x));
xml的方式比较灵活,如果有变更直接修改xml重启服务就可以,第一种还要修改代码重新编译部署
#26
字典表也没关系,项目启动的时候,或者第一次用到的时候,把字典数据load到内存就好了,数据量很小。kv的格式,想用的时候直接拿就ok了,就剩的连表了。
大数据表的话,能用int就不用varchar,索引效率都会有影响的
大数据表的话,能用int就不用varchar,索引效率都会有影响的
#27
ID DICT_TYPE DICT_NAME DICT_DIST FATHER_ID PERSON_NAME PERSON_AGE PERSON_SEX WORK_TYPE
3 WORK_TYPE WORK_O 第一大类工作
4 WORK_TYPE WORK_TW 第二大类工作
5 WORK_TYPE WORK_TH 第三大类工作
6 WORK_TYPE WORK_FO 第四大类工作
7 WORK_TYPE WORK_FI 第五大类工作
8 WORK_TYPE WORK_SI 第六大类工作
9 WORK_TYPE WORK_SE 第七大类工作
10 WORK_TYPE WORK_EI 第八大类工作
31 WORK_O DQO 党群组织 3
32 WORK_O QY 企业 3
33 WORK_O SYCP 事业单位负责人 3
34 WORK_O GJJG 国家机关 3
41 WORK_TW ZYJS 专业技术人员 4
51 WORK_TH BSP_YGP 办事人员和有关人员 5
61 WORK_FO SY 商业 6
62 WORK_FO FWP 服务业人员 6
71 WORK_FI NY 农业 7
72 WORK_FI LY 林业 7
73 WORK_FI MY 牧业 7
74 WORK_FI YY 渔业 7
75 WORK_FI SLY 水利业 7
81 WORK_SI SC 生产 8
81 WORK_SI YSSB 运输设备 8
81 WORK_SI CZP_YGP 操作人员及有关人员 8
91 WORK_SE JP 军人 9
101 WORK_EI OTHER 不便分类的其它从业人员 10
……
6100001 FWP DTM 大堂经理 62
3400001 GJJG ZFJG 行政机关 34
……
3.4E+11 ZFJG SFP 司法人员 3400001
P_00000001 PERSON 史建罔 47 1 3.4E+11
这张表能看懂吗 人物表
#28
看下效果上面的表 很难看
#29
上面的表看明白了 看最后一行数据
这是一个人的数据
看下最后一列 workType 它显示的也是index 也就是 引用id关联 看下 他的id号是什么
3.4E+11 ZFJG SFP 司法人员 3400001
职业司法官员 明白怎么用吗 如果但说你简单的男女 那么很简单 只要0,1就好 可是职业如此之多 那么我必须要建一个比较系统好管理表结构 结合 字典表 查询 方便快捷 而且好维护
那么再看下代码块 我怎么处理的 我只不过简单的处理 你看下
这是一个人的数据
看下最后一列 workType 它显示的也是index 也就是 引用id关联 看下 他的id号是什么
3.4E+11 ZFJG SFP 司法人员 3400001
职业司法官员 明白怎么用吗 如果但说你简单的男女 那么很简单 只要0,1就好 可是职业如此之多 那么我必须要建一个比较系统好管理表结构 结合 字典表 查询 方便快捷 而且好维护
那么再看下代码块 我怎么处理的 我只不过简单的处理 你看下
public class Constant {
public final static class DictMaster {
public static final String CITY = "CITY"; //城市
public static final String WORKTYPE = "WORKTYPE"; // 工作大类
public static final String WORK_O = "WORK_O"; // 第一工作大类
public static final String WORK_O_GJJG ="GJJG"; // 国家机关
public static final String WORK_O_GJJG_ZFJG = "ZFJG"; // *机关
public static final String WORK_O_GJJG_ZFJG_SFP = "SFP"; // 司法人员
public static final String DISTRICT = "DISTRICT"; //行政区
public static final String CIRCLE = "CIRCLE"; //商圈
}
}
public class ConstantController {
// DictMaster is Entity
// dict_master is table name
/**
* 缓存人类->职业大类:
*/
public static Map<String,Person> PERSON_WORK_MAP = new HashMap<String,Person>();
// ... 如(public static Map<String,Person> PERSON_CITY_MAP = new HashMap<String,Person>();)
private static void loadPersonMap(List<Person> list) {
for(Person p : list) {
CacheUtil.PERSON_MAP.put(p.getWorkName, p);
}
}
public static List<DictMaster>
WORK_NAME_LIST, // 工作大类列表
WORK_O_NAME_LIST, // 第一工作大类列表
.....; // ...CITY_NAME_LIST
// 终点 这里加载你说的
//加载***工作大类列表
WORK_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORKTYPE);
//加载第一工作大类列表
WORK_O_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORK_O);
//加载国家机关工作列表
WORK_O_GJJG_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORK_O_GJJG);
//加载*机关工作列表
WORK_O_GJJG_ZFJG_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORK_O_GJJG_ZFJG);
// ... CITY_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.CITY);
// 以上的list你能明白吗 再不明白 我没办法讲了
private static List<DictMaster> loadDictMasterList(EntityManager em, String dictType) {
List<DictMaster> personList = getDictMasterListBy(em,dictType);
loadDictMasterMap(personList);
return personList;
}
/**
* 根据dictType获取DictMaster 列表
*/
private static List<DictMaster> getPersonListBy(EntityManager em, String dictType) {
return em.createQuery("SELECT dm FROM DictMaster dm where dm.dictType=:dictType ORDER BY p.id ASC"
, Person.class).setParameter("dictType", dictType).getResultList();
}
private static void loadDictMasterMap(List<DictMaster> list) {
for(DictMaster dm : list) {
CacheUtil.DICT_MASTER_MAP.put(dm.getDictName(), dm);
}
}
}
#30
上面的表看明白了 看最后一行数据
这是一个人的数据
看下最后一列 workType 它显示的也是index 也就是 引用id关联 看下 他的id号是什么
3.4E+11 ZFJG SFP 司法人员 3400001
职业司法官员 明白怎么用吗 如果但说你简单的男女 那么很简单 只要0,1就好 可是职业如此之多 那么我必须要建一个比较系统好管理表结构 结合 字典表 查询 方便快捷 而且好维护
那么再看下代码块 我怎么处理的 我只不过简单的处理 你看下
public class Constant {
public final static class DictMaster {
public static final String CITY = "CITY"; //城市
public static final String WORKTYPE = "WORKTYPE"; // 工作大类
public static final String WORK_O = "WORK_O"; // 第一工作大类
public static final String WORK_O_GJJG ="GJJG"; // 国家机关
public static final String WORK_O_GJJG_ZFJG = "ZFJG"; // *机关
public static final String WORK_O_GJJG_ZFJG_SFP = "SFP"; // 司法人员
public static final String DISTRICT = "DISTRICT"; //行政区
public static final String CIRCLE = "CIRCLE"; //商圈
}
}
public class ConstantController {
// DictMaster is Entity
// dict_master is table name
/**
* 缓存人类->职业大类:
*/
public static Map<String,Person> PERSON_WORK_MAP = new HashMap<String,Person>();
// ... 如(public static Map<String,Person> PERSON_CITY_MAP = new HashMap<String,Person>();)
private static void loadPersonMap(List<Person> list) {
for(Person p : list) {
CacheUtil.PERSON_MAP.put(p.getWorkName, p);
}
}
public static List<DictMaster>
WORK_NAME_LIST, // 工作大类列表
WORK_O_NAME_LIST, // 第一工作大类列表
.....; // ...CITY_NAME_LIST
// 终点 这里加载你说的
//加载***工作大类列表
WORK_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORKTYPE);
//加载第一工作大类列表
WORK_O_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORK_O);
//加载国家机关工作列表
WORK_O_GJJG_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORK_O_GJJG);
//加载*机关工作列表
WORK_O_GJJG_ZFJG_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORK_O_GJJG_ZFJG);
// ... CITY_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.CITY);
// 以上的list你能明白吗 再不明白 我没办法讲了
private static List<DictMaster> loadDictMasterList(EntityManager em, String dictType) {
List<DictMaster> personList = getDictMasterListBy(em,dictType);
loadDictMasterMap(personList);
return personList;
}
/**
* 根据dictType获取DictMaster 列表
*/
private static List<DictMaster> getPersonListBy(EntityManager em, String dictType) {
return em.createQuery("SELECT dm FROM DictMaster dm where dm.dictType=:dictType ORDER BY p.id ASC"
, Person.class).setParameter("dictType", dictType).getResultList();
}
private static void loadDictMasterMap(List<DictMaster> list) {
for(DictMaster dm : list) {
CacheUtil.DICT_MASTER_MAP.put(dm.getDictName(), dm);
}
}
}
你这样还是把类型第一次启动存在内存中,然后把数据得到后进行转换是把?
#31
顶上去!!!
#1
大神在哪,呼叫中
#2
另外再维护一个民族的码表,把编号和名字记录下来;用的时候关联查询这个码表,方便后期维护吧,比如新增一个人,民族从这个码表里选择
#3
在数据库设计方面,建议用编码,将来无论排序、查找还是统计数字都优于文本。
#4
我是习惯以code方式存的
具体说不清 但是 感觉应该是这样的
code拿出来 以字典表的方式 得到翻译 然后显示出来 就比如说 名族 code 为01 在字典表中汉族
另一个是绑定方便 例如 中国少数名族 美国名族等。
比如一张表
dict_code index dict_name
1 china
2 usa
11 1 han
12 1 miao
21 2 Hispanics
22 2 Cherokee
而code 也就是你说的编码 不是可以和index 做关联吗!?
这样我们一张表可以做很多事情
假如说客户先选中编码 1 也就是中国 那么自动把中国名族都搞出来 之后放到下拉框 让客户去选择
select * from table a where 1=1 and a.dict_code = a.index
你感觉这样不方便吗
具体说不清 但是 感觉应该是这样的
code拿出来 以字典表的方式 得到翻译 然后显示出来 就比如说 名族 code 为01 在字典表中汉族
另一个是绑定方便 例如 中国少数名族 美国名族等。
比如一张表
dict_code index dict_name
1 china
2 usa
11 1 han
12 1 miao
21 2 Hispanics
22 2 Cherokee
而code 也就是你说的编码 不是可以和index 做关联吗!?
这样我们一张表可以做很多事情
假如说客户先选中编码 1 也就是中国 那么自动把中国名族都搞出来 之后放到下拉框 让客户去选择
select * from table a where 1=1 and a.dict_code = a.index
你感觉这样不方便吗
#5
上面sql 有问题
select a.dict_code from table a where 1=1 and a.dict_code = a.index and dict_code = 1;
这样简单速度 效率 很快把中国少数名族都拿出来 而且全部在一张表
select a.dict_code from table a where 1=1 and a.dict_code = a.index and dict_code = 1;
这样简单速度 效率 很快把中国少数名族都拿出来 而且全部在一张表
#6
所有说你可能走入了一个误区
一张表 不可能只为了一个字段去做事
所有我们会考虑很多情况
比如 我现在让你建一张表
中国所有的城市
一个城市所有的区域
一个区域所有的商圈
你会怎么去做!?
那么首先 我们要考虑怎么去建表!?
如果是我,因为只能搞一张表 。所以我会这么做,只给你做参考用
table:`dict_master`
colunm:
id
dict_type
dict_type_desc
dict_code
dict_code_desc
index_code
created_ts
updated_ts
id 这个不用说 了
dict_type 我是用来区分 城市区域商圈 类型的 以后可以再扩展
dict_code 就是编号
index_code 做关联用的
那么表好了以后差不多是这个样子的
id dict_type dict_type_desc dict_code dict_code_desc index_code created_ts updated_ts
1 CITY 城市 SH 上海 0000-00-00 00:00:00 0000-00-00 00:00:00
2 DISTRICT 区域 PT 普陀 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
3 DISTRICT 区域 JA 静安 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
4 DISTRICT 区域 YP 杨浦 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
5 DISTRICT 区域 HK 虹口 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
6 DISTRICT 区域 PD 浦东 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
7 DISTRICT 区域 BS 宝山 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
8 DISTRICT 区域 ZB 闸北 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
9 CIRCLE 商圈 YPGY 杨浦公园 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
10 CIRCLE 商圈 KJ 控江 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
11 CIRCLE 商圈 AS 鞍山 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
12 CIRCLE 商圈 WJC 五角场 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
13 CIRCLE 商圈 LXGY 鲁迅公园 HK 0000-00-00 00:00:00 0000-00-00 00:00:00
14 CIRCLE 商圈 SCBL 四川北路 HK 0000-00-00 00:00:00 0000-00-00 00:00:00
一张表 不可能只为了一个字段去做事
所有我们会考虑很多情况
比如 我现在让你建一张表
中国所有的城市
一个城市所有的区域
一个区域所有的商圈
你会怎么去做!?
那么首先 我们要考虑怎么去建表!?
如果是我,因为只能搞一张表 。所以我会这么做,只给你做参考用
table:`dict_master`
colunm:
id
dict_type
dict_type_desc
dict_code
dict_code_desc
index_code
created_ts
updated_ts
id 这个不用说 了
dict_type 我是用来区分 城市区域商圈 类型的 以后可以再扩展
dict_code 就是编号
index_code 做关联用的
那么表好了以后差不多是这个样子的
id dict_type dict_type_desc dict_code dict_code_desc index_code created_ts updated_ts
1 CITY 城市 SH 上海 0000-00-00 00:00:00 0000-00-00 00:00:00
2 DISTRICT 区域 PT 普陀 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
3 DISTRICT 区域 JA 静安 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
4 DISTRICT 区域 YP 杨浦 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
5 DISTRICT 区域 HK 虹口 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
6 DISTRICT 区域 PD 浦东 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
7 DISTRICT 区域 BS 宝山 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
8 DISTRICT 区域 ZB 闸北 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
9 CIRCLE 商圈 YPGY 杨浦公园 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
10 CIRCLE 商圈 KJ 控江 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
11 CIRCLE 商圈 AS 鞍山 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
12 CIRCLE 商圈 WJC 五角场 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
13 CIRCLE 商圈 LXGY 鲁迅公园 HK 0000-00-00 00:00:00 0000-00-00 00:00:00
14 CIRCLE 商圈 SCBL 四川北路 HK 0000-00-00 00:00:00 0000-00-00 00:00:00
#7
我认为直接存值比较好,方便一目了然,弄个数字感觉故弄玄虚
#8
如果直接存值,汉族改成了水族,你得用update语句来修改,如果数据量上亿的话需要花费的时间比较长,用数字编号则可只改一个地方就完成这个变动带来的影响。只是举个例子,名族当然肯定不会轻易改动的,还有一点汉字占空间比较大,如果说你的数据量不大的话,可以直接存值,否则就用编号。
#9
这样的东西,一般会存在字典表里
data_code,data_name,type_id
data_code,data_name,type_id
#10
所有说你可能走入了一个误区
一张表 不可能只为了一个字段去做事
所有我们会考虑很多情况
比如 我现在让你建一张表
中国所有的城市
一个城市所有的区域
一个区域所有的商圈
你会怎么去做!?
那么首先 我们要考虑怎么去建表!?
如果是我,因为只能搞一张表 。所以我会这么做,只给你做参考用
table:`dict_master`
colunm:
id
dict_type
dict_type_desc
dict_code
dict_code_desc
index_code
created_ts
updated_ts
id 这个不用说 了
dict_type 我是用来区分 城市区域商圈 类型的 以后可以再扩展
dict_code 就是编号
index_code 做关联用的
那么表好了以后差不多是这个样子的
id dict_type dict_type_desc dict_code dict_code_desc index_code created_ts updated_ts
1 CITY 城市 SH 上海 0000-00-00 00:00:00 0000-00-00 00:00:00
2 DISTRICT 区域 PT 普陀 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
3 DISTRICT 区域 JA 静安 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
4 DISTRICT 区域 YP 杨浦 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
5 DISTRICT 区域 HK 虹口 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
6 DISTRICT 区域 PD 浦东 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
7 DISTRICT 区域 BS 宝山 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
8 DISTRICT 区域 ZB 闸北 SH 0000-00-00 00:00:00 0000-00-00 00:00:00
9 CIRCLE 商圈 YPGY 杨浦公园 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
10 CIRCLE 商圈 KJ 控江 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
11 CIRCLE 商圈 AS 鞍山 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
12 CIRCLE 商圈 WJC 五角场 YP 0000-00-00 00:00:00 0000-00-00 00:00:00
13 CIRCLE 商圈 LXGY 鲁迅公园 HK 0000-00-00 00:00:00 0000-00-00 00:00:00
14 CIRCLE 商圈 SCBL 四川北路 HK 0000-00-00 00:00:00 0000-00-00 00:00:00
List<DISTRICT> dcList = session.createSqlQuery("select dm from dict_master dm where 1=1 and dm.index_code = 'SH'");
for(DISTRICT dc : dcList) {
System.out.println("区域 : "+dc.dictCodeDesc);
}
#11
//上海的所有区域拿出来了
List<DictMaster> dcList = session.createSqlQuery("select dm from dict_master dm where 1=1 and dm.index_code = 'SH'");
for(DictMaster dc : dcList) {
System.out.println("区域 : "+dc.dictCodeDesc);
}
// 杨浦所有商圈拿出来了
List<DictMaster> dcList = session.createSqlQuery("select dm from dict_master dm where 1=1 and dm.index_code = 'YP'");
for(DictMaster dc : dcList) {
System.out.println("商圈 : "+dc.dictCodeDesc);
}
#12
public class DictMaster() {
private int id;
private String dictType;
private String dictTypeDesc;
private String dictCode;
private String dictCodeDesc;
private String indexCode;
private Date createdTs;
private Date updatedTs;
public DictMaster() {
}
// generate getters,settes(id,dictType,dictTypeDesc,dictCode,dictCodeDesc,indexCode,createdTs,updatedTs) ....
}
//上海的所有区域拿出来了
List<DictMaster> districtDictList= session.createSqlQuery("select dm from dict_master dm where 1=1 and dm.index_code = 'SH'");
request.setAttribute("districtDictList",districtDictList);
// 杨浦所有商圈拿出来了
List<DictMaster> circleDictList= session.createSqlQuery("select dm from dict_master dm where 1=1 and dm.index_code = 'YP'");
request.setAttribute("circleDictList",circleDictList);
#13
上面sql 有问题
select a.dict_code from table a where 1=1 and a.dict_code = a.index and dict_code = 1;
这样简单速度 效率 很快把中国少数名族都拿出来 而且全部在一张表
但是这样有个问题啊,假如我取很多数据,那我怎么把编码转化为值啊,这样的字段如果很多,转换的效率不是很低吗?
#14
上面sql 有问题
select a.dict_code from table a where 1=1 and a.dict_code = a.index and dict_code = 1;
这样简单速度 效率 很快把中国少数名族都拿出来 而且全部在一张表
但是这样有个问题啊,假如我取很多数据,那我怎么把编码转化为值啊,这样的字段如果很多,转换的效率不是很低吗?
就是我假如有一个person表,有很多字段,都是用这种编码的形式,比如民族用编码 性别01代表男性,02代表女性,工作性质01代表工人,02代表农民,03代表官员,到时候我再前台显示的时候怎么把性别的01转换为男性,工作性质的01转换为工人呢,这样不是要很多表一起查吗,数据如果很多的话 这样多表效率不会很低吗?
#15
一般用代码来被引用,描述本身可能会变更或翻译成多种语言。当然我们也可以把汉语名称本身当代码,以后翻译直接再给另一个英文或繁体描述。代码本身代表着逻辑方面,而名称仅是给“眼睛”看的,名称可能修改或翻译。
我们之所以用多个表,主要是基于关系型数据库中的消除数据重复,相信我们以前考试时都回答过这道题。
如果本身它被使用到的场合很少,那重复的情况也就不是什么大问题,直接用名称也没什么问题。
我们之所以用多个表,主要是基于关系型数据库中的消除数据重复,相信我们以前考试时都回答过这道题。
如果本身它被使用到的场合很少,那重复的情况也就不是什么大问题,直接用名称也没什么问题。
#16
如果以后做多语言的版本呢。
#17
用hql语言取
#18
可以弄个码表,把对应的编码和汉字写入码表。
#19
假如有一个person表,有很多字段,都是用这种编码的形式,比如民族用编码 性别01代表男性,02代表女性,工作性质01代表工人,02代表农民,03代表官员,到时候我再前台显示的时候怎么把性别的01转换为男性,工作性质的01转换为工人呢,这样不是要很多表一起查吗,数据如果很多的话 这样多表效率不会很低吗?
首先 等于2个sql 虽然一句也可以写完 但其实操作是2个 对吧
1.先把你说的找出阿里 在修改:
String sql = "select p from Person p where 1=1 and a.sex = '01' and a.work_type = '01' " ;
List<Person> pList = session.createQuery(hql);
// 如果翻译 这你自己要写个字典表了
比如:
public class Person {
...
private Sex sex;
private WorkType workType;
...
...
public void setWorkType(String workType) {
this.workType = new WorkType (workType);
}
public void setSex(String sex) {
this.sex = new Sex(sex);
}
public WorkType getWorkType() {
return this.workType ;
}
public Sex getSex(){
return this.sex;
}
...
}
public class Sex {
String male = "01";
String female = "02";
public sex(String sex){
if(male.eques(sex)) {
.....
}
}
}
更直接 用枚举
work type 也是如此 第一次搞肯定很麻烦 以后用的话 你说那个方便吗 。
就像页面跳出来code 一样 404 400 500 这种
#20
假如有一个person表,有很多字段,都是用这种编码的形式,比如民族用编码 性别01代表男性,02代表女性,工作性质01代表工人,02代表农民,03代表官员,到时候我再前台显示的时候怎么把性别的01转换为男性,工作性质的01转换为工人呢,这样不是要很多表一起查吗,数据如果很多的话 这样多表效率不会很低吗?
首先 等于2个sql 虽然一句也可以写完 但其实操作是2个 对吧
1.先把你说的找出阿里 在修改:
String sql = "select p from Person p where 1=1 and a.sex = '01' and a.work_type = '01' " ;
List<Person> pList = session.createQuery(hql);
// 如果翻译 这你自己要写个字典表了
比如:
public class Person {
...
private Sex sex;
private WorkType workType;
...
...
public void setWorkType(String workType) {
this.workType = new WorkType (workType);
}
public void setSex(String sex) {
this.sex = new Sex(sex);
}
public WorkType getWorkType() {
return this.workType ;
}
public Sex getSex(){
return this.sex;
}
...
}
public class Sex {
String male = "01";
String female = "02";
public sex(String sex){
if(male.eques(sex)) {
.....
}
}
}
更直接 用枚举
work type 也是如此 第一次搞肯定很麻烦 以后用的话 你说那个方便吗 。
就像页面跳出来code 一样 404 400 500 这种
这里其实就是一个问题,取的问题,比如按照你上面的表设计,不是要join很多表来去编码对应的值吗,你下面的那种用常量在java中我用过,我就是想知道在数据库中怎么把编码转值啊!
#21
比如我要去1000条人的数据,如果不把数据字典缓存在内存中,这样查询的时候不是效率很低吗,我设置这样编码的字段有十个,那这个hql怎么写啊!
#22
假如有一个person表,有很多字段,都是用这种编码的形式,比如民族用编码 性别01代表男性,02代表女性,工作性质01代表工人,02代表农民,03代表官员,到时候我再前台显示的时候怎么把性别的01转换为男性,工作性质的01转换为工人呢,这样不是要很多表一起查吗,数据如果很多的话 这样多表效率不会很低吗?
首先 等于2个sql 虽然一句也可以写完 但其实操作是2个 对吧
1.先把你说的找出阿里 在修改:
String sql = "select p from Person p where 1=1 and a.sex = '01' and a.work_type = '01' " ;
List<Person> pList = session.createQuery(hql);
// 如果翻译 这你自己要写个字典表了
比如:
public class Person {
...
private Sex sex;
private WorkType workType;
...
...
public void setWorkType(String workType) {
this.workType = new WorkType (workType);
}
public void setSex(String sex) {
this.sex = new Sex(sex);
}
public WorkType getWorkType() {
return this.workType ;
}
public Sex getSex(){
return this.sex;
}
...
}
public class Sex {
String male = "01";
String female = "02";
public sex(String sex){
if(male.eques(sex)) {
.....
}
}
}
更直接 用枚举
work type 也是如此 第一次搞肯定很麻烦 以后用的话 你说那个方便吗 。
就像页面跳出来code 一样 404 400 500 这种
你这样不是每次查询还要去查字典表啊?
#23
我们也转么写个constent 用来搞 字典表
public class Constant {
/*
*SEXTYPE 性别类型
*/
public static enum SEXTYPE {
MALE("01"), // 男性
FEMALE("11"), // 女性
;
private SEXTYPE (String type) {}
}
/*
*WORKTYPE 职业类型
*/
public static enum WORKTYPE {
WORKER("01"), // 工人
FARMER("02"), // 农民
OFFICIAL("03"), // 官员
;
private WORKTYPE (String type) {}
}
}
#24
顶啊 ,这个用数据字典除了灵活,再取的时候怎么更方便的把编码转换为值啊,比如我要显示100条数据,我怎么把编码转换为值,是在服务启动的时候就把数据字典读到内存中,然后把编码和值进行转换,还有个问题是多个属性的字典是放在一张表中,然后形成一个Map<id,map<id,name>>这种数据结构吗?
#25
顶啊 ,这个用数据字典除了灵活,再取的时候怎么更方便的把编码转换为值啊,比如我要显示100条数据,我怎么把编码转换为值,是在服务启动的时候就把数据字典读到内存中,然后把编码和值进行转换,还有个问题是多个属性的字典是放在一张表中,然后形成一个Map<id,map<id,name>>这种数据结构吗?
1、可以不用什么字典表,可以直接在代码里用if判断,if(x==1){person.setMinZu("汉族")},判断56个名族,提炼成一个方法,传编号进去,返回民族,或者用switch也可以
2、写一个xml文件,存储56个民族和编号,加载服务器的时候读取到一个静态的Map中,然后代码就可以这样判断
person.setMinZu(map.get(x));
xml的方式比较灵活,如果有变更直接修改xml重启服务就可以,第一种还要修改代码重新编译部署
#26
字典表也没关系,项目启动的时候,或者第一次用到的时候,把字典数据load到内存就好了,数据量很小。kv的格式,想用的时候直接拿就ok了,就剩的连表了。
大数据表的话,能用int就不用varchar,索引效率都会有影响的
大数据表的话,能用int就不用varchar,索引效率都会有影响的
#27
ID DICT_TYPE DICT_NAME DICT_DIST FATHER_ID PERSON_NAME PERSON_AGE PERSON_SEX WORK_TYPE
3 WORK_TYPE WORK_O 第一大类工作
4 WORK_TYPE WORK_TW 第二大类工作
5 WORK_TYPE WORK_TH 第三大类工作
6 WORK_TYPE WORK_FO 第四大类工作
7 WORK_TYPE WORK_FI 第五大类工作
8 WORK_TYPE WORK_SI 第六大类工作
9 WORK_TYPE WORK_SE 第七大类工作
10 WORK_TYPE WORK_EI 第八大类工作
31 WORK_O DQO 党群组织 3
32 WORK_O QY 企业 3
33 WORK_O SYCP 事业单位负责人 3
34 WORK_O GJJG 国家机关 3
41 WORK_TW ZYJS 专业技术人员 4
51 WORK_TH BSP_YGP 办事人员和有关人员 5
61 WORK_FO SY 商业 6
62 WORK_FO FWP 服务业人员 6
71 WORK_FI NY 农业 7
72 WORK_FI LY 林业 7
73 WORK_FI MY 牧业 7
74 WORK_FI YY 渔业 7
75 WORK_FI SLY 水利业 7
81 WORK_SI SC 生产 8
81 WORK_SI YSSB 运输设备 8
81 WORK_SI CZP_YGP 操作人员及有关人员 8
91 WORK_SE JP 军人 9
101 WORK_EI OTHER 不便分类的其它从业人员 10
……
6100001 FWP DTM 大堂经理 62
3400001 GJJG ZFJG 行政机关 34
……
3.4E+11 ZFJG SFP 司法人员 3400001
P_00000001 PERSON 史建罔 47 1 3.4E+11
这张表能看懂吗 人物表
#28
看下效果上面的表 很难看
#29
上面的表看明白了 看最后一行数据
这是一个人的数据
看下最后一列 workType 它显示的也是index 也就是 引用id关联 看下 他的id号是什么
3.4E+11 ZFJG SFP 司法人员 3400001
职业司法官员 明白怎么用吗 如果但说你简单的男女 那么很简单 只要0,1就好 可是职业如此之多 那么我必须要建一个比较系统好管理表结构 结合 字典表 查询 方便快捷 而且好维护
那么再看下代码块 我怎么处理的 我只不过简单的处理 你看下
这是一个人的数据
看下最后一列 workType 它显示的也是index 也就是 引用id关联 看下 他的id号是什么
3.4E+11 ZFJG SFP 司法人员 3400001
职业司法官员 明白怎么用吗 如果但说你简单的男女 那么很简单 只要0,1就好 可是职业如此之多 那么我必须要建一个比较系统好管理表结构 结合 字典表 查询 方便快捷 而且好维护
那么再看下代码块 我怎么处理的 我只不过简单的处理 你看下
public class Constant {
public final static class DictMaster {
public static final String CITY = "CITY"; //城市
public static final String WORKTYPE = "WORKTYPE"; // 工作大类
public static final String WORK_O = "WORK_O"; // 第一工作大类
public static final String WORK_O_GJJG ="GJJG"; // 国家机关
public static final String WORK_O_GJJG_ZFJG = "ZFJG"; // *机关
public static final String WORK_O_GJJG_ZFJG_SFP = "SFP"; // 司法人员
public static final String DISTRICT = "DISTRICT"; //行政区
public static final String CIRCLE = "CIRCLE"; //商圈
}
}
public class ConstantController {
// DictMaster is Entity
// dict_master is table name
/**
* 缓存人类->职业大类:
*/
public static Map<String,Person> PERSON_WORK_MAP = new HashMap<String,Person>();
// ... 如(public static Map<String,Person> PERSON_CITY_MAP = new HashMap<String,Person>();)
private static void loadPersonMap(List<Person> list) {
for(Person p : list) {
CacheUtil.PERSON_MAP.put(p.getWorkName, p);
}
}
public static List<DictMaster>
WORK_NAME_LIST, // 工作大类列表
WORK_O_NAME_LIST, // 第一工作大类列表
.....; // ...CITY_NAME_LIST
// 终点 这里加载你说的
//加载***工作大类列表
WORK_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORKTYPE);
//加载第一工作大类列表
WORK_O_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORK_O);
//加载国家机关工作列表
WORK_O_GJJG_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORK_O_GJJG);
//加载*机关工作列表
WORK_O_GJJG_ZFJG_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORK_O_GJJG_ZFJG);
// ... CITY_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.CITY);
// 以上的list你能明白吗 再不明白 我没办法讲了
private static List<DictMaster> loadDictMasterList(EntityManager em, String dictType) {
List<DictMaster> personList = getDictMasterListBy(em,dictType);
loadDictMasterMap(personList);
return personList;
}
/**
* 根据dictType获取DictMaster 列表
*/
private static List<DictMaster> getPersonListBy(EntityManager em, String dictType) {
return em.createQuery("SELECT dm FROM DictMaster dm where dm.dictType=:dictType ORDER BY p.id ASC"
, Person.class).setParameter("dictType", dictType).getResultList();
}
private static void loadDictMasterMap(List<DictMaster> list) {
for(DictMaster dm : list) {
CacheUtil.DICT_MASTER_MAP.put(dm.getDictName(), dm);
}
}
}
#30
上面的表看明白了 看最后一行数据
这是一个人的数据
看下最后一列 workType 它显示的也是index 也就是 引用id关联 看下 他的id号是什么
3.4E+11 ZFJG SFP 司法人员 3400001
职业司法官员 明白怎么用吗 如果但说你简单的男女 那么很简单 只要0,1就好 可是职业如此之多 那么我必须要建一个比较系统好管理表结构 结合 字典表 查询 方便快捷 而且好维护
那么再看下代码块 我怎么处理的 我只不过简单的处理 你看下
public class Constant {
public final static class DictMaster {
public static final String CITY = "CITY"; //城市
public static final String WORKTYPE = "WORKTYPE"; // 工作大类
public static final String WORK_O = "WORK_O"; // 第一工作大类
public static final String WORK_O_GJJG ="GJJG"; // 国家机关
public static final String WORK_O_GJJG_ZFJG = "ZFJG"; // *机关
public static final String WORK_O_GJJG_ZFJG_SFP = "SFP"; // 司法人员
public static final String DISTRICT = "DISTRICT"; //行政区
public static final String CIRCLE = "CIRCLE"; //商圈
}
}
public class ConstantController {
// DictMaster is Entity
// dict_master is table name
/**
* 缓存人类->职业大类:
*/
public static Map<String,Person> PERSON_WORK_MAP = new HashMap<String,Person>();
// ... 如(public static Map<String,Person> PERSON_CITY_MAP = new HashMap<String,Person>();)
private static void loadPersonMap(List<Person> list) {
for(Person p : list) {
CacheUtil.PERSON_MAP.put(p.getWorkName, p);
}
}
public static List<DictMaster>
WORK_NAME_LIST, // 工作大类列表
WORK_O_NAME_LIST, // 第一工作大类列表
.....; // ...CITY_NAME_LIST
// 终点 这里加载你说的
//加载***工作大类列表
WORK_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORKTYPE);
//加载第一工作大类列表
WORK_O_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORK_O);
//加载国家机关工作列表
WORK_O_GJJG_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORK_O_GJJG);
//加载*机关工作列表
WORK_O_GJJG_ZFJG_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.WORK_O_GJJG_ZFJG);
// ... CITY_NAME_LIST = loadDictMasterList(em, Constant.DictMaster.CITY);
// 以上的list你能明白吗 再不明白 我没办法讲了
private static List<DictMaster> loadDictMasterList(EntityManager em, String dictType) {
List<DictMaster> personList = getDictMasterListBy(em,dictType);
loadDictMasterMap(personList);
return personList;
}
/**
* 根据dictType获取DictMaster 列表
*/
private static List<DictMaster> getPersonListBy(EntityManager em, String dictType) {
return em.createQuery("SELECT dm FROM DictMaster dm where dm.dictType=:dictType ORDER BY p.id ASC"
, Person.class).setParameter("dictType", dictType).getResultList();
}
private static void loadDictMasterMap(List<DictMaster> list) {
for(DictMaster dm : list) {
CacheUtil.DICT_MASTER_MAP.put(dm.getDictName(), dm);
}
}
}
你这样还是把类型第一次启动存在内存中,然后把数据得到后进行转换是把?
#31
顶上去!!!