java数据字典映射实体类_基于数据字典的通用查询系统(四)实体类的设计 1

本文介绍了Java数据字典映射实体类的设计,包括QueryTable、QueryCol、JoinCondition等类的抽象,以及ColShowType枚举和ColStateValue处理。重点阐述了QueryCol类中如何处理日期和状态位,特别是ColStateValues的实现,用于在查询时将状态位映射为直观的显示。此外,还展示了ColStateValues构造函数和GetState方法的代码示例。
摘要由CSDN通过智能技术生成

我们分为两个部分对这个模块中的信息进行Class的抽象,一是从数据库结构进行抽像,一中是从查询的构造过程进行抽象。

在列出包含的类之前,有一点需要说明,就是,正如前面分析,我们要对每一个元素都有一个对数据库的表示,和对用户的表示,在这里,我把对数据库的表示统一为属性Exp,对用户的表示统一为Show

一.从数据库结构进行抽像。

1. 表示数据库中的表的类QueryTable

2. 表示数据库中的列的类QueryCol

3. 表示数据库中的连接的类JoinCondition

4. 表示数据类型的枚举ColShowType,就是我们在第二篇中分析的那四种数据类型(数值,日期,字符串,状态位)

5. 表示数据库中状态位的ColStateValue;

6. 为了操作方便,抽像出集合JoinCoditions,ColStateValues;

类图如下:

971b98e50bde69fd3afa2e901b046ee4.png呵呵,介于园子里大侠比较多的原因,类的代码就不都贴在这里了,这里只把QueryCol的实现简单说一下。

我们前面说了,我们一共有四种数据类型,按照正常,也是最合乎情况的方式,应当对这四种类型抽像出一个统一的结口,然后实现四种对应的类。进行与QueryCol进行结合,但是在这里,为了处理方便,QueryCol采用了冗余设计的方式,即有些类似于C 、C++中的联合,在一些场合下,只用其特定的属性。

一个是用于处理在日期类型下使用的属性Format,因为如前文所说,日期可能是以datetime存储,也可以是以varchar存储,在这种情况下,当用户进行操作后,就有必要有一种方式将进转换成符合数据库中表的列的设计方式的。这时,我们的Format就起了作用。

另外就是处理在状态位时使用的属性ColStateValues属性,它是一个ColStateValue的集合,这样说可能不大好明白,举个列子,比如一个列,state, 当其为0时表示未处理,当其为1时表示已经处理。

那么这个列就有一个ColSateValues的属性,其中第一个元素的Show为”未处理”,Exp为”0”,第二个元素的 Show为”已经处理”,Exp为”1”;

在这里,为 了使以后的查询结果表示直观,我们还要为ColStateValues设计一个GetState的方法,也就是通过一个元素的exp查找这个元素的show的过程。

至于这些附加的信息存在哪,呵呵, 我们在数据库设计时不是有ColStateString吗?在不同的情况下做一下处理就行了。

为了更明白,最有效的方法,贴一下QueryCol的构造函数吧,嘿嘿

9310e85a14af99de4811ff4c77f1f911.png

24a924a57ba6b3f2b51fc9edb7ea4186.pngCodeinternalQueryCol(String exp, String show, QueryTable table,inttype, String values)

{

Exp=exp;

Show=show;

DataTable=table;this.ColShowType=(ColShowType)type;if(ColShowType==ColShowType.State)

ColStateValues=newColStateValues(values);elseColStateValues=null;if(this.ColShowType==ColShowType.Date)

Format=values;

}

啊,ColStateValues也不能忘了,呵呵,代码如下:

9310e85a14af99de4811ff4c77f1f911.png

24a924a57ba6b3f2b51fc9edb7ea4186.pngCodenamespaceSFTech.Query.Entity

{publicclassColStateValues : List{privateSystem.Collections.Hashtable _hash;internalColStateValues(String values)

:base()

{string[] value=values.Split(newchar[] {'|'}, StringSplitOptions.RemoveEmptyEntries);stringshow;string_value;

_hash=newSystem.Collections.Hashtable();for(inti=0; i

{if(value[i].IndexOf('&')>=0)

{

show=value[i].Substring(0, value[i].IndexOf('&')).Trim();

_value=value[i].Substring( value[i].IndexOf('&')+1).Trim();

}else{

show=value[i].Trim();

_value=value[i].Trim();

}

_hash.Add(_value , show );this.Add(newColStateValue(show,_value));

}

}publicString GetState(stringvalue)

{return_hash[value]asstring;

}

}

}

这里已经考虑了用字符串等其他非数值信息做状态位的情况。。

各位看官别说看的头大啊,小的文笔有限,只能先写成这个样子了,呵呵。

明天该写最关键部分,查询部分类库的设计了,呵

系列文章连接

三。数据库设计。

四。实体类设计

五。算法实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值