关于细粒度泛型DAO封装的一些思考

关于细粒度泛型DAO封装的一些思考

 

 

此文首发于老紫竹的Java世纪网,原文地址:http://www.java2000.net/p17630

 

还是把自己花了时间写的文章复制一份到自己的博客保存,以下为原文内容:

 

1、泛型查询动作接口(非完整版本,如分页功能都未加入)

 

 

2、泛型查询动作实现类

 

 

3、泛型数据访问接口(非完整版本,仅以查询和保存动作为例),用于实现所有CRUD动作集的组装

 

 

4、泛型数据访问实现类

 

 

5、一些调用的测试

 

 

6、以上测试(未注释部分)的结果输出(配置档中已开启自动生成的SQL信息及自行编写的连接池状态信息输出)

 

[Current Connection Pool Size In 2009-07-07 20:33:41.994]:10
[CmSdk4j Auto SQL Generator In 2009-07-07 20:33:42.005]
SELECT id, accountname, onlinetime, birthday, loginname, loginpassword, email, accountstate FROM account WHERE birthday > ? AND birthday < ?
------------------------------
[SQL Where Clause Parameter In 2009-07-07 20:33:42.038]
No:1
Column:birthday
Type:java.sql.Date
Value:1985-01-01
------------------------------
[SQL Where Clause Parameter In 2009-07-07 20:33:42.038]
No:2
Column:birthday
Type:java.sql.Date
Value:1989-01-01
------------------------------

2 | 张三 | zhangsan123@tom.com | 1988-03-12
5 | 赵六 | zhaoliu123@yahoo.com.cn | 1987-10-21
7 | 邓远辰 | test@test.com | 1986-02-01
[Current Connection Pool Size In 2009-07-07 20:33:44.995]:10
[Current Connection Pool Size In 2009-07-07 20:33:47.995]:10
[Current Connection Pool Size In 2009-07-07 20:33:50.995]:10
[Current Connection Pool Size In 2009-07-07 20:33:53.995]:10
[Current Connection Pool Size In 2009-07-07 20:33:56.995]:10

 

7、相关说明
原来也封装过几次DAO,但都显得很苍白。一是粒度不够细,二是都是纯SQL参数的封装,不能实现ORM自动映射持久化动作。
直到接触了Hibernate后,才发现有ORM这样的概念,虽然对Hibernate的使用涉及不深,也没有去阅读Hibernate的优雅代码,但对其复杂的实体关联关系的映射档配置深有感触。特别是对UML中基本的实体关系都不熟悉的程序员,要将关联映射弄透彻又谈何容易?当然,我的实现中也模拟了一些Hibernate的作法,比如对POJO的所有成员变量都用包装类型来处理,以便于将POJO对象作为查询条件。
于是,我便有了一种书写一个类似于简易版本的ORM框架的想法,主要还是通过反射与泛型编程的结合,打造一个自己的实现ORM的泛型DAO。当然,由于我什么东西都想自己去实践一遍,以便理解流行框架的实现原理和技术实质,所以做这个泛型DAO封装时还自行模拟了一个连接池,也定制了自己的配置档,使用者可以自行调配。配置档内容如下:

 

另外还有一个专门用于映射数据库表和实体关系的配置档,由于此文并非探讨ORM原理,所以就不贴出来了。

就上面的测试效果而言,其执行效率还是挺不错的。由于配合了JDBC的批处理功能,上面的批处理方式添加多个POJO的执行时间(向数据库中插入一万条测试数据)为1.4秒(Vista+JDK6.0),感觉还不错。由于我在类型反射动作上做了一些缓存处理,所以我这个ORM映射处理逻辑对执行速度的损失不是很明显。

从上面的代码中也可以看出,细粒度划分CRUD动作后,代码的层次结构显得非常清晰,也更容易理解。可能是我的个人习惯缘故,我建模时都是先建数据库模型再建类模型,即还是以客户数据为中心,当数据库模型建好后,再以此为原型建立实体类(我习惯使用不带业务逻辑的POJO)模型,并且在实体类模型中移除所有数据库模型中的关联关系。这些关联关系由专门的业务逻辑层去统一处理。这也可能是我的ORM映射处理逻辑执行速度感觉较快的原因。

也许屏幕前的您并不赞同我这样的作法,还请您给予指点为谢!


By CodingMouse
2009年7月7日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值