注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

我的博客

 
 
 

日志

 
 

通用DAO类  

2011-08-27 09:46:21|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

通用DAO类

http://www.cnblogs.com/S-E-P/archive/2010/09/20/2045053.html

 

 

一般编写MVC的数据持久化层是使用DAO模式。所谓DAO,也就是Data Access Object(数据访问接口)。DAO与业务逻辑层传递的是一个实体对象,而这个实体对象是数据库表在程序中的一个映射。

所以对于数据库中要操作的每一张表,都要建立一个VO(实体对象)类,一个DAO接口,一个创建DAO的工厂类,以及一个DAO的实现类。而这些基本是一样的,如果程序需要访问多个表的时候,需要大量的重复劳动。就有了抽象出来的必要


思考:

首先分析DAO模式中的每一部分

VO(对象实体):这个类成员变量与数据库中每个字段一一对应,同时提供了相应是set和get方法来设置或取得数值。这个类一般是通过IDE自动生成的

DAO(数据访问接口):这个是业务逻辑层使用数据持久化层服务的一个接口

DAOFactory(工厂类):它提供了创建DAO类的一个方法,目的是更改数据持久化层实现时(比如更换数据库),不需要对业务逻辑层进行更改,只要再创建一个实现了DAO接口的类,再交给DAOFactory创建对象就可以了。为程序提供了更好的扩充性

DAOImpl(实现类):这个类实现了DAO接口。同时也是代码最多的类。

从上文分析看出,抽象DAO首先要从实现类下手。在不同的表中,DAO提供的操作基本类似,所以实现类所实现的方法基本相同,不同的地方主要有这样几个方面:


 

1、传递的实体类类型

2、实体类的取值赋值方法

3、SQL语句


 

这些问题第一个解决起来最容易,可以通过Java的泛型解决。第三个也比较容易,可以在创建时传入字段,执行时生成SQL语句。只有第二个最困难,因为并不知道实体类提供哪些方法,以及方法的返回值和参数列表,怎么样去调用未知的方法?


关键技术:

Java为我们提供了反射机制,来进行一些对象的操作。

比如通过这个方法可以让加载器加载一个类:


 

Class c = Class.forName(className);


 

得到Class对象以后,我们可以调用它的公有的无参构造方法,获得它的一个实例


 

Object o = c.newInstance();


 

也可以获得描述它所有方法的一个数组


 

Method[] m = c.getMethods();


 

也可以得到某一个方法的方法名


 

System.out.println(m[0].getName());


 

或者对一个方法的参数列表及返回值类型的描述


 

System.out.println(m[0].toGenericString());


 

通过以上方法,可以分析出哪个方法是我们想要的方法,我们怎么调用它呢


 

public Object invoke(Object obj, Object... args)

参数:

obj
- 从中调用底层方法的对象

args
- 用于方法调用的参数
返回:
使用参数
args

obj
上指派该对象所表示方法的结果


 

通过这个方法,在第一个参数传入一个创建的对象,2~n个参数传入调用方法的参数,就可以调用这个方法,
同时也可以接受得到Object类型的返回值。想了解更详细的内容可以参考JDK API
理解了以上的函数,我们可以动手编写这个类了
 
  评论这张
 
阅读(720)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017