《DAO设计模式解读课件.ppt》由会员分享,可在线阅读,更多相关《DAO设计模式解读课件.ppt(22页珍藏版)》请在三一办公上搜索。
1、DAO设计模式,本章将介绍什么是DAO,以及使用DAO设计模式的优点。还将介绍如何设计数据库连接类、VO类、DAO接口、DAO实现类以及DAO工厂类。通过本章的学习,读者应该能够完成如下几个目标。 了解什么是DAO设计模式以及其优点 熟练掌握如何定义数据库连接类 熟练掌握如何定义VO类 熟练掌握如何定义DAO接口、DAO类以及DAO工厂类 熟练掌握如何使用DAO实现数据库操作,1 DAO简介,1.1 DAO设计模式定义 1)DAO的全称是(Data Access Object),数据访问对象。 2)使用DAO设计模式:来封装数据库持久层的所有操作。使得底层的数据逻辑和高层的业务逻辑相分离,达到
2、解耦合的目的。1.2 DAO模式的应用背景 很多的J2EE应用程序需要使用持久性数据(数据库、文件等)。不同的程序,持久性存储是各不相同的,并且用来访问这些不同的持久性存储机制的API也有很大的不同。假如应用程序要在不同的持久性存储间迁移,这些访问特定持久存储层的代码将面临重写。,1 DAO简介,业务对象只应该关注业务逻辑,不应该关心数据存取的细节。数据访问对象必须实现特定的持久化策略(如,基于JDBC或Hibernate的持久化逻辑)因此就抽出来了DAO层,作为数据源层,而之上的Domain Model(领域模型)层与之通讯而已,如果将那些实现了数据访问操作的所有细节都放入高层Domain
3、model的话,系统的结构一定层次上来说就变得有些混乱。低级别的数据访问逻辑与高级别的业务逻辑分离,用一个DAO接口隐藏持久化操作的细节,这样使用的最终目的就是让业务对象无需知道底层的持久化技术知识,这是标准 j2ee 设计模式之一,1 DAO简介,1.3 利用DAO设计模式的解决方案 使用数据访问对象(DAO)模式来抽象和封装所有对数据源的访问。DAO治理着与数据源的连接以便检索和存储数据。DAO实现了用来操作数据源的访问机制。数据源可以是RDBMS,LDAP,File等。 依靠于DAO的业务组件为其客户端使用DAO提供更简单的接口。DAO完全向客户端隐藏了数据源实现细节。由于当低层数据源实
4、现变化时,DAO向客户端提供的接口不会变化,所有该模式答应DAO调整到不同的存储模式,而不会影响其客户端或者业务组件。重要的是,DAO充当组件和数据源之间的适配器。,1 DAO简介,1.4 DAO模式中各种关系的类图,1 DAO简介,1.4 参与者和职责 1)BusinessObject(业务对象) 代表数据客户端。正是该对象需要访问数据源以获取和存储数据。 2)DataAccessObject(数据访问对象) 是该模式的主要对象。DataAccessObject抽取该BusinessObject的低层数据访问实现,以保证对数据源的透明访问。BusinessObject也可以把数据加载和存储操
5、作委托给DataAccessObject。,1 DAO简介,3)DataSource(数据源) 代表数据源实现。数据源可以是各RDBMSR数据库,OODBMS,xml文件等等。4)valueObject(值对象) 代表用做数据携带着的值对象。DataAccessObject可以使用值对象来把数据返回给客户端。DataAccessObject也许会接受来自于客户端的数据,其中这些用于更新数据源的数据存放于值对象中来传递。,2 DAO组成,2.1 一个典型的DAO实现有如下的组件一个DAO接口;一个实现了DAO接口的具体类一个DAO工程类数据传输对象(有时称为值对象)2.2 举例:以维护一个客户信
6、息为例,具体的组件如下所示:1)CustomerDao 接口;2)Customer值对象(VO); 3) CustomerDaoImpl(接口的具体实现类); 4)CustomerFactory(工程类,实例化用);5)DBConnection数据库连接类,3 DAO各部分详解,DAO包括五个重要的部分,分别是数据库连接类、VO类、DAO接口、DAO实现类以及DAO工厂类,下面将对各部分进行详细的介绍。,3.1 数据库连接类,数据库连接类的主要功能是连接数据库并获得连接对象,以及关闭数据库。通过数据库连接类可以大大的简便开发,在需要进行数据库连接时,只需创建该类的实例,并调用其中的方法就可以获
7、得数据库连接对象和关闭数据库,不必再进行重复操作。,3.2 VO类,VO类是一个包含属性和表中字段完全对应的类。并在该类中提供setter和getter方法来设置并获得该类中的属性。,3.3 DAO接口,DAO接口中定义了所有的用户的操作,如添加记录、删除记录以及查询记录等。不过因为是接口,所以仅仅是定义,需要子类来实现。,3.4 DAO实现类,DAO实现类实现了DAO接口,并实现了DAO接口中定义的所有方法。在DAO实现中通过连接数据库进行数据库操作。,3.5 DAO工厂类,在没有DAO工厂类的情况下,必须通过创建DAO实现类的实例才能完成数据库操作。这时就必须知道具体的子类,对于后期的修改
8、非常不便。如后期需要创建一个操作Oracal的DAO实现类,这时就必须修改所有的使用DAO实现类的代码。 使用DAO工厂类可以很好的解决后期修改的问题,可以通过该DAO工厂类的一个静态方法来获得DAO实现类实例。这时如果需要替换DAO实现类,只需修改该DAO工厂类中的方法代码,而不必修改所有的操作数据库代码。,.4 DAO模式普通写法(步骤),第一步:封装好类对象 public class Users private String userName=; private String passWord=; public Users(String userName,String passWord)
9、 this.userName=userName; this.passWord=passWord; public String getPassWord() return passWord; public void setPassWord(String passWord) this.passWord = passWord; public String getUserName() return userName; public void setUserName(String userName) this.userName = userName; ,.4 DAO模式普通写法(步骤),第二步:写类对象所
10、对应的DAO接口 1.此接口规定各种业务逻辑方法 例如: package com.sk.dao; import com.sk.object.Users; public interface UserDAO public Users getUser(String userName); ,第三步:写此DAO接口所对应的各种(基于数据库、文本。)实现类,比如: 1.此类为单态类(构造函数私有,通过方法返回此类的实例) 例如: private UserDAOImp()/私有构造 public static UserDAOImp getUserDaoImp() return new UserDAOImp(
11、); /通过此方法得到UserDAOImp的实例 2.此类实现了db操作 public class UserDAOImp implements UserDAO private Connection conn=null; private PreparedStatement ps=null; private String url=jdbc:odbc:users;databaseName=users;user=sa;password=; private String sql=; private ResultSet rs=null;,private Connection getConnection()
12、 throws ClassNotFoundException, SQLException Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); conn=DriverManager.getConnection(url); return conn; public Users getUser(String userName) this.getConnection(); sql=select username,password from users where username=?; ps=conn.prepareStatement(sql); ps.setStr
13、ing(1, userName); rs=ps.executeQuery(); if(rs.next() return new Users(rs.getString(username), rs.getString(password); ,第四步:写工厂(制造dao接口实现的静态方法,既是写制造上面第三步类的工厂) 1.public static UserDAO getUserDAO() return UserDAOImp.getUserDaoImp(); 例如: public class DAOFactory public static UserDAO getUserDAO() return
14、UserDAOImp.getUserDaoImp(); ,第五步:写service类(业务逻辑操作) 例如:public class UserDAOService public Users checkLogin(String userName,String passWord) UserDAO userDAO=DAOFactory.getUserDAO(); Users user= userDAO.getUser(userName); if(user!=null) if(user.getPassWord().equals(passWord) return user; return null; ,.5 综合练习,1)目标:用户登录,注册2)要求:使用DAO设计模式的后台JDBC实现3)功能:a)登录 b)注册c)检查用户的唯一性,.6 小结,本章详细介绍了DAO设计模式的优点以及包含的部分内容。介绍了如何设计数据库连接类、VO类、DAO接口、DAO实现类以及DAO工厂类。还介绍了如何通过DAO设计模式添加记录、更新记录、删除记录、按ID查询记录以及查询所以记录。,