- 浏览: 98413 次
- 性别:
- 来自: 武汉
最新评论
-
yuanyuanhere:
这个方法是不是有问题啊
我的格式定义也是这样,如果date1是 ...
JAVA Date.after方法的时间定时应用 -
flyingpig4:
你说的smartChineseAnalyze是基于词库分表的吧 ...
lucene2.9 中文分词学习和SmartChineseAnalyzer的用法 -
javamanlcy007:
如果访问量很大,数据写入过于频繁,数据库会不会崩溃?
点击率统计mysql 自动加1 -
liuzm:
smallsnake 写道qyhdt 写道 不知道lz对 ...
lucene 入门学习,简单实例模访google搜索 -
smallsnake:
qyhdt 写道 不知道lz对lucene理解达到什么层 ...
lucene 入门学习,简单实例模访google搜索
J2EE之DAO设计模式详解
如果把连接数据库和数据的操作代码(访问持久化的数据源)与这些组件写在一起的话,会导致这些组件和数据库操作之间的耦合,这种耦合的存在,使得在应用程序中从当前数据源类型迁移到另一种数据源类型变的十分困难和乏味. 如果数据源改变了,那么你的组件也不得不改变来适应新的数据源.
组件需要对现有的持久化储存系统或者数据源的实现足够透明,以便在向不同的产品,不同类型的储存系统,和不同类型数据源中进行迁移的时候,变的简单。
数据访问对象负责管理与数据源的连接,来获取和储存其中的数据。
暴露给客户端的DAO接口在低层数据源的实现发生改变时并不会随着改变,所以这种设计模式使得DAO可以适应不同的数据储存方式类型而不影响客户端和商业组件.最主要的, DAO还在组件和数据源之间扮演着协调者的角色.
以下是DAO设计模式中各个模块的解释:
1 BusinessObject指的是数据客户端,他通常需要去访问数据源以获得数据或储存数据.一个BusinessObject除了访问数据源的servlet或者helper bean之外也可以是会话BEAN,实体BEAN以及一些其他的JAVA对象.
2 DataAccessObject 是这个设计模式的核心部分, DataAccessObject为BusinessObject抽象了底层的数据访问实现的细节,使得访问数据变得透明. BusinessObject还将数据的装载和储存交给了DataAccessObject进行代理.
3 DataSource他表示的是数据源的实现. 一个数据源可以是像关系型数据库管理体统这样的数据库,可以是面向对象型的数据库管理系统,可以是XML文档,也可以是简单文件等等. 当然他也可以是其他的系统,(遗留系统,大型主机),可以是服务(B2B服务,信用卡局服务)或者是像LDAP这样的数据库等.
4 TransferObject他代表的是传递对象,一般用于数据的载体. DataAccessObject使用传递对象来将数据返回给客户端. DataAccessObject也可以使用传递对象来从客户端接受数据来将原先数据库中的数据进行更新.
DAO设计模式可以通过采用抽象工厂和工厂方法模式来变得非常的灵活.
当底层数据存储实现不需要发生改变时,该策略可以使用工厂方法设计模式实现,来产生应用中所需的DAO.
当底层数据储存实现不得不发生变化的时候, 我们可以用抽象工厂模式来实现这个策略.
在当前情况,可以提供一个抽象的DAO工厂对象(抽象工厂),用他来创建不同类型的具体DAO工厂,每一个工厂都各自支持一种不同的数据持久化储存的实现. 一旦你为某个特定的实现获得了具体的DAO工厂,你则可以用这个工厂来产生那个特定实现所支持和实现的DAO对象.
1 采用工厂方法设计模式
如果一个DAO 工厂只为一个数据库的实现,(比如ORACLE)而创建很多的DAO的时候,实现该策略时,我们考虑采用工厂方法设计模式. 假设该工厂类创建了CustomerDAO, AccountDAO, orderDAO 等一些对象。
2 使用抽象工厂设计模式:
如果考虑为三种不同类型的数据库来实现这个策略,我们可以考虑采用抽象工厂设计模式. 假设. 这个工厂创建了CustomerDAO, AccountDAO, orderDAO的一系列的DAO, 该策略运用了在抽象工厂中产生的工厂类中的工厂方法的实现.
----------------------------------------------------------------
代码说明:
我们以使用抽象工厂的设计模式来对付多种类型数据库为例,在以下的例子中只具体列出CLOUDSCAPE 数据库类型的DAO设计模式的具体实现,其他类型数据库DAO设计模式的实现大同小异.
1 // Abstract class DAO Factory
public abstract class DAOFactory {
// List of DAO types supported by the factory
public static final int CLOUDSCAPE = 1;
public static final int orACLE = 2;
public static final int SYBASE = 3;
...
// There will be a method for each DAO that can be
// created. The concrete factories will have to
// implement these methods.
// 所有实现该抽象工厂的工厂类中必须有的方法,用这些方法来创建具体的DAO类.
public abstract CustomerDAO getCustomerDAO();
public abstract AccountDAO getAccountDAO();
public abstract orderDAO getOrderDAO();
//该抽象类的静态方法,用他来创建其他具体的DAO工厂类
public static DAOFactory getDAOFactory(
int whichFactory) {
switch (whichFactory) {
case CLOUDSCAPE:
return new CloudscapeDAOFactory();
case orACLE :
return new oracleDAOFactory();
case SYBASE :
return new SybaseDAOFactory();
...
default :
return null;
}
}
}
2 以下是Cloudscape DAO FACTORY 类的实现,在他里面实现了该类型数据库的连接,以及实现了他所继承的抽象工厂类中所必须实现的那些方法,在这些方法中创建具体的DAO对象.
// Cloudscape concrete DAO Factory implementation
import java.sql.*;
public class CloudscapeDAOFactory extends DAOFactory {
public static final String DRIVER=
"COM.cloudscape.core.RmiJdbcDriver";
public static final String DBURL=
"jdbc:cloudscape:rmi://localhost:1099/CoreJ2EEDB";
// method to create Cloudscape connections
//建立Cloudscape 连接
public static Connection createConnection() {
// Use DRIVER and DBURL to create a connection
// Recommend connection pool implementation/usage
}
//创建 CustomerDAO 对象 当然返回的是一个该类实现的接口,他的好处就是实现了实现细节的隐蔽.
public CustomerDAO getCustomerDAO() {
// CloudscapeCustomerDAO implements CustomerDAO
return new CloudscapeCustomerDAO();
}
//创建 AccountDAO 对象 当然返回的是一个该类实现的接口,他的好处就是实现了实现细节的隐蔽.
public AccountDAO getAccountDAO() {
// CloudscapeAccountDAO implements AccountDAO
return new CloudscapeAccountDAO();
}
//创建 orderDAO 对象 当然返回的是一个该类实现的接口,他的好处就是实现了实现细节的隐蔽.
public orderDAO getOrderDAO() {
// CloudscapeOrderDAO implements orderDAO
return new CloudscapeOrderDAO();
}
...
}
3 以下代码就是具体DAO类实现的接口也就是CloudscapeCustomerDAO()实现的接口: CustomerDAO .在该接口中定义了所有的业务方法.
// Interface that all CustomerDAOs must support
public interface CustomerDAO {
public int insertCustomer(...);
public boolean deleteCustomer(...);
public Customer findCustomer(...);
public boolean updateCustomer(...);
public RowSet selectCustomersRS(...);
public Collection selectCustomersTO(...);
...
}
4 以下CloudscapeCustomerDAO类实现的具体业务细节和数据操作细节, 他是要向客户数据端隐蔽的.
import java.sql.*;
public class CloudscapeCustomerDAO implements
CustomerDAO {
public CloudscapeCustomerDAO() {
// initialization
}
// The following methods can use
// CloudscapeDAOFactory.createConnection()
// to get a connection as required
public int insertCustomer(...) {
// Implement insert customer here.
// Return newly created customer number
// or a -1 on error
}
public boolean deleteCustomer(...) {
// Implement delete customer here
// Return true on success, false on failure
}
public Customer findCustomer(...) {
// Implement find a customer here using supplied
// argument values as search criteria
// Return a Transfer Object if found,
// return null on error or if not found
}
public boolean updateCustomer(...) {
// implement update record here using data
// from the customerData Transfer Object
// Return true on success, false on failure or
// error
}
public RowSet selectCustomersRS(...) {
// implement search customers here using the
// supplied criteria.
// Return a RowSet.
}
public Collection selectCustomersTO(...) {
// implement search customers here using the
// supplied criteria.
// Alternatively, implement to return a Collection
// of Transfer Objects.
}
...
}
5 下面的代码是数据客户端向DAO中传输数据的, 他其实就是一个JAVABEAN;
public class Customer implements java.io.Serializable {
// member variables
int CustomerNumber;
String name;
String streetAddress;
String city;
...
// getter and setter methods...
...
}
6最后就是客户数据端对这个设计的应用:
...
// create the required DAO Factory
DAOFactory cloudscapeFactory =
DAOFactory.getDAOFactory(DAOFactory.DAOCLOUDSCAPE);
// Create a DAO
CustomerDAO custDAO =
cloudscapeFactory.getCustomerDAO();
// create a new customer
int newCustNo = custDAO.insertCustomer(...);
// Find a customer object. Get the Transfer Object.
Customer cust = custDAO.findCustomer(...);
// modify the values in the Transfer Object.
cust.setAddress(...);
cust.setEmail(...);
// update the customer object using the DAO
custDAO.updateCustomer(cust);
// delete a customer object
custDAO.deleteCustomer(...);
// select all customers in the same city
Customer criteria=new Customer();
criteria.setCity("New York");
Collection customersList =
custDAO.selectCustomersTO(criteria);
// returns customersList - collection of Customer
// Transfer Objects. iterate through this collection to
// get values.
1 创建一个抽象工厂类,他包含两个重要的部分: 第一部分是 一些抽象方法,这些方法是所有实现该抽象工厂的具体工厂类所必须实现的. 第二部分 就是一个静态方法,该方法来创建一个具体类型数据源的工厂对象,比如文中的CloudscapeDAOFactory().
2 然后,分别创建各个类型数据源的工厂类,(本文以CloudscapeDAOFactory为例).在这个工厂类中里面也有两个重要组成部分: 第一部分就是实现在他继承的那个抽象工厂类中的左右抽象方法,在该方法中创建具体的DAO对象(这些对象的类在第4不具体定义实现),本文中三个方法分别创建了3个具体的DAO对象,当然为了实现细节的隐蔽,这些方法返回的是这些具体DAO类门实现的接口(这些接口在第3步实现).
3 定义具体DAO类的接口,并在接口中定义所有的业务方法,和数据操作方法.
4 定义具体的DAO类,在这个类中才是实际的业务方法,和数据的操作的实现.
5 定义数据传输对象,他是用来在客户端和DAO之间传递数据的,他其实就是一个JAVABEAN.
6 完成以上5步之后我们就可以在数据客户端使用以上由DAO设计模式定义好的各个类了(见最后一个代码例子块).
以上6步大家在编程的时需具体体会,一般来说,数据库中的一个表就可以对应一个数据传递类也就是在第4步中定义的那个类,类中的属性就是表中的字段,然后加上相应的GET,SET 方法. 然后再按模式和以上步骤来定义具体的类.
本篇文章来源于 :刘志猛博客 原文链接:http://www.liuzm.com/article/java/9618.htm
http://www.liuzm.com
如果把连接数据库和数据的操作代码(访问持久化的数据源)与这些组件写在一起的话,会导致这些组件和数据库操作之间的耦合,这种耦合的存在,使得在应用程序中从当前数据源类型迁移到另一种数据源类型变的十分困难和乏味. 如果数据源改变了,那么你的组件也不得不改变来适应新的数据源.
组件需要对现有的持久化储存系统或者数据源的实现足够透明,以便在向不同的产品,不同类型的储存系统,和不同类型数据源中进行迁移的时候,变的简单。
数据访问对象负责管理与数据源的连接,来获取和储存其中的数据。
暴露给客户端的DAO接口在低层数据源的实现发生改变时并不会随着改变,所以这种设计模式使得DAO可以适应不同的数据储存方式类型而不影响客户端和商业组件.最主要的, DAO还在组件和数据源之间扮演着协调者的角色.
以下是DAO设计模式中各个模块的解释:
1 BusinessObject指的是数据客户端,他通常需要去访问数据源以获得数据或储存数据.一个BusinessObject除了访问数据源的servlet或者helper bean之外也可以是会话BEAN,实体BEAN以及一些其他的JAVA对象.
2 DataAccessObject 是这个设计模式的核心部分, DataAccessObject为BusinessObject抽象了底层的数据访问实现的细节,使得访问数据变得透明. BusinessObject还将数据的装载和储存交给了DataAccessObject进行代理.
3 DataSource他表示的是数据源的实现. 一个数据源可以是像关系型数据库管理体统这样的数据库,可以是面向对象型的数据库管理系统,可以是XML文档,也可以是简单文件等等. 当然他也可以是其他的系统,(遗留系统,大型主机),可以是服务(B2B服务,信用卡局服务)或者是像LDAP这样的数据库等.
4 TransferObject他代表的是传递对象,一般用于数据的载体. DataAccessObject使用传递对象来将数据返回给客户端. DataAccessObject也可以使用传递对象来从客户端接受数据来将原先数据库中的数据进行更新.
DAO设计模式可以通过采用抽象工厂和工厂方法模式来变得非常的灵活.
当底层数据存储实现不需要发生改变时,该策略可以使用工厂方法设计模式实现,来产生应用中所需的DAO.
当底层数据储存实现不得不发生变化的时候, 我们可以用抽象工厂模式来实现这个策略.
在当前情况,可以提供一个抽象的DAO工厂对象(抽象工厂),用他来创建不同类型的具体DAO工厂,每一个工厂都各自支持一种不同的数据持久化储存的实现. 一旦你为某个特定的实现获得了具体的DAO工厂,你则可以用这个工厂来产生那个特定实现所支持和实现的DAO对象.
1 采用工厂方法设计模式
如果一个DAO 工厂只为一个数据库的实现,(比如ORACLE)而创建很多的DAO的时候,实现该策略时,我们考虑采用工厂方法设计模式. 假设该工厂类创建了CustomerDAO, AccountDAO, orderDAO 等一些对象。
2 使用抽象工厂设计模式:
如果考虑为三种不同类型的数据库来实现这个策略,我们可以考虑采用抽象工厂设计模式. 假设. 这个工厂创建了CustomerDAO, AccountDAO, orderDAO的一系列的DAO, 该策略运用了在抽象工厂中产生的工厂类中的工厂方法的实现.
----------------------------------------------------------------
代码说明:
我们以使用抽象工厂的设计模式来对付多种类型数据库为例,在以下的例子中只具体列出CLOUDSCAPE 数据库类型的DAO设计模式的具体实现,其他类型数据库DAO设计模式的实现大同小异.
1 // Abstract class DAO Factory
public abstract class DAOFactory {
// List of DAO types supported by the factory
public static final int CLOUDSCAPE = 1;
public static final int orACLE = 2;
public static final int SYBASE = 3;
...
// There will be a method for each DAO that can be
// created. The concrete factories will have to
// implement these methods.
// 所有实现该抽象工厂的工厂类中必须有的方法,用这些方法来创建具体的DAO类.
public abstract CustomerDAO getCustomerDAO();
public abstract AccountDAO getAccountDAO();
public abstract orderDAO getOrderDAO();
//该抽象类的静态方法,用他来创建其他具体的DAO工厂类
public static DAOFactory getDAOFactory(
int whichFactory) {
switch (whichFactory) {
case CLOUDSCAPE:
return new CloudscapeDAOFactory();
case orACLE :
return new oracleDAOFactory();
case SYBASE :
return new SybaseDAOFactory();
...
default :
return null;
}
}
}
2 以下是Cloudscape DAO FACTORY 类的实现,在他里面实现了该类型数据库的连接,以及实现了他所继承的抽象工厂类中所必须实现的那些方法,在这些方法中创建具体的DAO对象.
// Cloudscape concrete DAO Factory implementation
import java.sql.*;
public class CloudscapeDAOFactory extends DAOFactory {
public static final String DRIVER=
"COM.cloudscape.core.RmiJdbcDriver";
public static final String DBURL=
"jdbc:cloudscape:rmi://localhost:1099/CoreJ2EEDB";
// method to create Cloudscape connections
//建立Cloudscape 连接
public static Connection createConnection() {
// Use DRIVER and DBURL to create a connection
// Recommend connection pool implementation/usage
}
//创建 CustomerDAO 对象 当然返回的是一个该类实现的接口,他的好处就是实现了实现细节的隐蔽.
public CustomerDAO getCustomerDAO() {
// CloudscapeCustomerDAO implements CustomerDAO
return new CloudscapeCustomerDAO();
}
//创建 AccountDAO 对象 当然返回的是一个该类实现的接口,他的好处就是实现了实现细节的隐蔽.
public AccountDAO getAccountDAO() {
// CloudscapeAccountDAO implements AccountDAO
return new CloudscapeAccountDAO();
}
//创建 orderDAO 对象 当然返回的是一个该类实现的接口,他的好处就是实现了实现细节的隐蔽.
public orderDAO getOrderDAO() {
// CloudscapeOrderDAO implements orderDAO
return new CloudscapeOrderDAO();
}
...
}
3 以下代码就是具体DAO类实现的接口也就是CloudscapeCustomerDAO()实现的接口: CustomerDAO .在该接口中定义了所有的业务方法.
// Interface that all CustomerDAOs must support
public interface CustomerDAO {
public int insertCustomer(...);
public boolean deleteCustomer(...);
public Customer findCustomer(...);
public boolean updateCustomer(...);
public RowSet selectCustomersRS(...);
public Collection selectCustomersTO(...);
...
}
4 以下CloudscapeCustomerDAO类实现的具体业务细节和数据操作细节, 他是要向客户数据端隐蔽的.
import java.sql.*;
public class CloudscapeCustomerDAO implements
CustomerDAO {
public CloudscapeCustomerDAO() {
// initialization
}
// The following methods can use
// CloudscapeDAOFactory.createConnection()
// to get a connection as required
public int insertCustomer(...) {
// Implement insert customer here.
// Return newly created customer number
// or a -1 on error
}
public boolean deleteCustomer(...) {
// Implement delete customer here
// Return true on success, false on failure
}
public Customer findCustomer(...) {
// Implement find a customer here using supplied
// argument values as search criteria
// Return a Transfer Object if found,
// return null on error or if not found
}
public boolean updateCustomer(...) {
// implement update record here using data
// from the customerData Transfer Object
// Return true on success, false on failure or
// error
}
public RowSet selectCustomersRS(...) {
// implement search customers here using the
// supplied criteria.
// Return a RowSet.
}
public Collection selectCustomersTO(...) {
// implement search customers here using the
// supplied criteria.
// Alternatively, implement to return a Collection
// of Transfer Objects.
}
...
}
5 下面的代码是数据客户端向DAO中传输数据的, 他其实就是一个JAVABEAN;
public class Customer implements java.io.Serializable {
// member variables
int CustomerNumber;
String name;
String streetAddress;
String city;
...
// getter and setter methods...
...
}
6最后就是客户数据端对这个设计的应用:
...
// create the required DAO Factory
DAOFactory cloudscapeFactory =
DAOFactory.getDAOFactory(DAOFactory.DAOCLOUDSCAPE);
// Create a DAO
CustomerDAO custDAO =
cloudscapeFactory.getCustomerDAO();
// create a new customer
int newCustNo = custDAO.insertCustomer(...);
// Find a customer object. Get the Transfer Object.
Customer cust = custDAO.findCustomer(...);
// modify the values in the Transfer Object.
cust.setAddress(...);
cust.setEmail(...);
// update the customer object using the DAO
custDAO.updateCustomer(cust);
// delete a customer object
custDAO.deleteCustomer(...);
// select all customers in the same city
Customer criteria=new Customer();
criteria.setCity("New York");
Collection customersList =
custDAO.selectCustomersTO(criteria);
// returns customersList - collection of Customer
// Transfer Objects. iterate through this collection to
// get values.
1 创建一个抽象工厂类,他包含两个重要的部分: 第一部分是 一些抽象方法,这些方法是所有实现该抽象工厂的具体工厂类所必须实现的. 第二部分 就是一个静态方法,该方法来创建一个具体类型数据源的工厂对象,比如文中的CloudscapeDAOFactory().
2 然后,分别创建各个类型数据源的工厂类,(本文以CloudscapeDAOFactory为例).在这个工厂类中里面也有两个重要组成部分: 第一部分就是实现在他继承的那个抽象工厂类中的左右抽象方法,在该方法中创建具体的DAO对象(这些对象的类在第4不具体定义实现),本文中三个方法分别创建了3个具体的DAO对象,当然为了实现细节的隐蔽,这些方法返回的是这些具体DAO类门实现的接口(这些接口在第3步实现).
3 定义具体DAO类的接口,并在接口中定义所有的业务方法,和数据操作方法.
4 定义具体的DAO类,在这个类中才是实际的业务方法,和数据的操作的实现.
5 定义数据传输对象,他是用来在客户端和DAO之间传递数据的,他其实就是一个JAVABEAN.
6 完成以上5步之后我们就可以在数据客户端使用以上由DAO设计模式定义好的各个类了(见最后一个代码例子块).
以上6步大家在编程的时需具体体会,一般来说,数据库中的一个表就可以对应一个数据传递类也就是在第4步中定义的那个类,类中的属性就是表中的字段,然后加上相应的GET,SET 方法. 然后再按模式和以上步骤来定义具体的类.
本篇文章来源于 :刘志猛博客 原文链接:http://www.liuzm.com/article/java/9618.htm
http://www.liuzm.com
发表评论
-
JAVA插入数据库时java.sql.DataTruncation: Data truncation
2010-05-21 16:42 891今天在做SQL2000的数据库数据交换下,报java.sql. ... -
我的官方博客,欢迎大家来访
2010-02-26 14:36 788http://liuzhimeng.com/ 关注java,, ... -
用Eclipse开发J2ME手机游戏入门(创建Hello)
2010-01-30 09:42 854http://www.liuzm.com/article/ja ... -
通过项目了解Calendar 时间日期应用
2010-01-30 09:41 1987通过项目了解Calendar 应用,这是自己写的一个小小的功能 ... -
JAVA插入数据库时java.sql.DataTruncation: Data truncation
2010-01-30 09:39 1835今天在做SQL2000的数据库数据交换下,报java.sql. ... -
java 时间求星期几
2010-01-30 09:38 1470在java项目中,时间是永远都不离不开的,不管什么项目,都有时 ... -
JAVA抽象类和接口的区别
2010-01-25 14:56 734这篇文章对抽象类和接 ... -
java四种操作xml方式的比较
2010-01-25 14:54 6741. 介绍 1)DOM(JAXP Crimson ... -
XML使用的五种场合
2010-01-25 14:53 700在很多研讨会和培训班 ... -
61条面向对象设计的经验原则
2010-01-25 14:52 54761条面向对象设计的经验原则: (1)所有数据都应该隐 ... -
JAVA - IO初步认识
2010-01-25 14:51 763IO 有初步认识,对IO包的学习引导 什么是IO ----- ... -
java调用windows 下dos命令
2010-01-25 14:48 865最近没事,想用JAVA写点调用WIN 的DOS命令 以下是我自 ... -
jsp使用URL传递中文参数乱码问题
2010-01-21 09:53 1414在项目中怎么解决参数乱码问题呢? 如下就是我在项目中解决的问题 ... -
HashTable和HashMap的区别
2010-01-21 09:52 1229HashTable和HashMap的区别 HashTable的 ... -
Java--List和Set
2010-01-21 09:51 1246List和Set的用法 容器类可以大大提高编程效率和编程能力, ... -
JAVA:String类、StringBuffer类、Math类。
2010-01-21 09:48 956JAVA:String类、StringBuffer类、Math ... -
使用String.split方法时要注意
2010-01-21 09:47 554使用String.split方法时要注意的问题 在使用Stri ... -
Hibernate中DetachedCriteria和Criteria的完整用法
2010-01-21 09:46 1124Hibernate中DetachedCriteria和Crit ... -
java replaceAll用法-模仿Google搜索关键字变红
2010-01-21 09:41 2136replaceAll用法-模仿Google搜索关键字变红 下面 ... -
java 求随机6个字符串
2010-01-19 14:51 824在项目中是不是常用到 随机数? 如下代码是 求随机6个字符串 ...
相关推荐
J2EE之DAO设计模式
J2EE学习笔记--DAO设计模式基础.txt
资料包含j2ee中常用的设计模式,详细地分析各种设计模式的原理,还包括Structs中文文档和精通struts技术,精通struts技术文档是项目开发者的实践项目经验总结
J2EE中的设计模式
J2EE_设计模式,不错的资源,共享给大家
J2EE设计模式.ppt J2EE设计模式.ppt
压缩包里面包括设计模式的API和搞笑解释,详细的描述了J2EE的全部设计模式,适合初学者学习
J2EE核心模式之DAO ( J2EE核心模式之DAO(简体中文).pdf )
23种JAVA设计模式和15种J2EE设计模式,各个模式的简述。
j2EE-MVC设计模式(内附ppt讲解,学习笔记和应用实例),帮助你理解掌握mvc模式
J2ee设计模式.pdfJ2ee设计模式.pdf
本书介绍J2EE设计模式,及如何应用这些模式建立高质量应用程序,包括设计企业方案应用程序时使用的各种设计模式,并分章节介绍各个模式。本书有针对性地列举大量实用代码,以便读者理解和掌握J2EE企业开发中的觉问题...
Java DAO 设计模式.pdf j2ee
J2EE基础, Java设计模式,设计模式
DAO设计模式是属于J2EE数据层的操作,使用DAO设计模式可以简化大量代码,增强程序的可移植性。
实用J2EE设计模式编程指南.pdf J2ee设计模式