DAO层的一点儿设计细节

客户网站流量的提高,导致几次系统内存崩溃,察看日志发现,是DAO层对数据库过量请求引起的,居然发现一个SQL中,使用了13个jion,被雷到了。

 

而今天一个同事为另外一个项目的增添新功能,明明只需要一个表内的数据,却对数据库请求了5次,其中三次是彻底的无用功,一次仅仅为了验证数据的存在,而是用join并把一个表中的所有字段拿出,无语了。

 

我们的几个项目都是一种构架,WebService分为了两层:DAO通过POJO负责与数据库交互,Service层,通过DTO与客户端通信,而POJO也负责DAO和Service之间的数据传递。而DAO在第一个项目开始不久,就放弃了Hibernate,完全适用JDBC对数据库进行访问。

 

POJO基本上是与数据库中的每个表对应,所有的字段都有相应的属性映射。而DTO为了提高网络传递的效率,只有客户端需要的属性,因此有几个DTO对应一个POJO的情况存在,同时在DAO和Service层分别由Assembler负责相应对象的创建和属性的赋值。

 

而上述情况就是由于开发过程中,为了减少Assembler的数量和代码的重复造成的。

 

其实这种情况可以通过以下方案解决:

 

1、DAO方法调用该方法的Service接口需要提供的数据,确定表及字段。

2、POJO中的属性名称与表格的字段名称一一对应,并保持一致。

3、在DAO层的Assembler中,对POJO所有属性通过Field动态赋值,并捕捉SQL异常。

4、通过JUnit保证DTO提供了客户端所需的所有属性是争取的。

 

希望下一个项目中,开始使用这个机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值