|
最近在整理以前学习JAVA时留下的一些学习笔记,收获波多...现将其中一篇关于DAO模式的学习心得发出来,以供大家分享...
在此先说明一下,在本帖中,我并不会对DAO模式作很详细的讲解(关于DAO模式的更多详细介绍,还请您自己去上网查找一些牛人写的文档 ),如本文标题所示,只是"浅谈"而已.如果你看了本贴之后,能够快速的开发出自己的DAO组件,那就已经是达到了我的目的了... ,如果您发现本文有错的地方,请指出来,不胜感激!!!
好,废话少说,让我们进入正题...
DAO简介
在以前常规的应用程序开发当中,如果有涉及到数据持久层的操作,那业务代码将无可避免的嵌入一些与业务无关的语句,如SQL语句,try{..}catch{..}语句...这样,代码将变得很难维护,而且组件复用也无从谈起,违背了OO原则.使用DAO模式能帮我们解决这个问题.DAO(Data Access Objects),也就是数据访问对象的简称.
首先,数据持久层开发人员先把对数据库的操作(也就是一些SQL语句:insert,update...)封装成一个DAO组件,然后发布给业务开发人员使用.则从使用者(业务开发人员)的角度来看,他们对数据的操作,就像是对对象的操作一样,一切都变得简单明了.如,要将一个User对象插入到数据库中,可以这样来做:UserDAO.insert(user);DAO组件会自动帮你把User对象中的属性插入到持久层中.这样一来,业务开发人员再也不用面对那些烦人的SQL,try{..} catch{..}语句了,天大欢喜...
下面以一个实际的例子来说明DAO模式的好处.
假如有一个User类,它有id,name,age等属性,它是一个标准的JAVABEAN.现我们的业务需求是要持久化一个User对象,直接使用JDBC的开发模式,业务开发人员将不得不这样来写:
-
- ...
- Connection conn = null;
- PreparedStatement pre = null;
- String sql = "insert into user(id,name,age) values(?,?,?)";
- try
- {
- Class.forName("yourDBDriver");
- conn = Driver.getConnection();
- pre = conn.prepareStatement(sql);
- pre.setInt(1,user.getId());
- pre.setString(2,user.getName());
- pre.setInt(3,user.getAge());
- pre.executeUpdate();
- }
- catch(SQLException e)
- {
- e.printStackTrace();
- }
- finally
- {
- if(conn != null)
- {
- try
- {
- conn.close();
- }
- catch(SQLException e)
- {
- e.printStackTrace();
- }
- }
- if(pre != null)
- {
- try
- {
- pre.close();
- }
- catch(SQLException e)
- {
- e.printStackTrace();
- }
- }
- }
- ...
复制代码
在这些代码中,真正与业务需求(持久化User对象)有关的,才四行代码,其它的都是一些与业务无关的辅助性代码.下面我们使用DAO模式,由于DAO组件已由持久层开发人员开发好了,所以业务开发人员只须以下两行代码就可以持久化一个User对象:
IUserDAO userDAO = (IUserDAO)getUserDAO();//IUserDAO为通用的数据访问接口
userDAO.insert(user);
其中getUserDAO()返回的就是具体的DAO组件.从中我们也可以看出,业务代码只与数据操作接口有关,而与底层实现无关,如果哪天要将应用程序由MySQL系统移植到MSSQL系统,那我们只需修改配置文件中的底层实现配置,而无须修改任何业务逻辑代码!
现在你应该可以稍微领略到DAO模式的威力了吧
看到这里,学过Hibernate的同学可能对我上面所说的不以为然,认为在持久层的操作方面,Hibernate已经帮我们封装得很好了,我们无须再开发自己的DAO组件.没错,Hibernate是一款非常优秀的ORM解决方案,事实上,您可以将其用在您认为可以用的地方.我也极力推荐您这样做.但作为开发人员,特别是JAVA开发者,我们不应极限于某种框架,对一种框架的应用,或者说学习,应是"学习其架构与设计思想"(某位牛人的语录,可惜我一直做不到..: ) ,而不是不厌其烦的学习其API怎么用(惭愧,我也是这样...唉.. : ).在这里,我之所以要讲解DAO模式,并不是要您在实际开发中使用DAO(您也可以这样做),最主要的目的,是要让您了解什么是设计模式,设计模式怎么来,以及设计模式威力之所在.(当然,还有设计模式所带给开发者的乐趣. [em013] )...
又说了一些废话[em013] 好,下面让我们来开发一个完整的基于DAO模式的应用程序
Let's go...
|
评分
-
3
查看全部评分
-
|