`
touchinsert
  • 浏览: 1329410 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

实现可扩展的DAO,本文给出实现DAO的编程思想。

阅读更多

开发环境:本文使用TomcatStrutsMySQL

为实现可扩展的DAO,本文将使用JNDI连接数据库,并将JNDI保存在XML文件里。同时也将调用sql语句的类 名保存在XML文件里。

例如:

1 dao-config.xml。该文件可以配置多个数据库的JNDI。在DAO初始化时,会将这些信息存入对象里。JNDI名为java:comp/env/jdbc/Colimas

<!--DOCTYPE dao SYSTEM "/DTD/dao.dtd"-->

<dao>

<dao-config id="base" type="jdbc">

<dao-param name="datasource">java:comp/env/jdbc/Colimas</dao-param>

</dao-config>

</dao>

2 dao-declaration.xml。该文件保存处理某数据库表的类名。

<dao>

<dao-object name="daoCBI">

<use-dao id="base"/>

<class>com.nova.colimas.data.sql.SQLTCBI</class>

</dao-object>

<dao-object name="daoUBI">

<use-dao id="base"/>

<class>com.nova.colimas.data.sql.SQLTUBI</class>

</dao-object>

<dao-object name="daoURM">

<use-dao id="base"/>

<class>com.nova.colimas.data.sql.SQLTURM</class>

</dao-object>

</dao>

3 配置JNDI。修改Tomcatserver.xml。在<host..><Context..>里面添加

<Resource name="jdbc/Colimas" auth="Container" type="javax.sql.DataSource"

maxActive="100" maxIdle="30" maxWait="10000"

username="root" password="197913" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/Colimas?autoReconnect=true"/>

网上的很多文章的JNDI配置方法都不一样。这个对MySQL 5.0的配置方法。另外要到www.mysql.com 里下载最新的jdbc driver: mysql-connector-java-3.1.10-bin.jar

拷贝到$(TOMCATHOME)\common\lib

4 配置web.xml。在你的web app里调用jndi需要添加

<resource-ref>

<description>DB Connection</description>

<res-ref-name>jdbc/Colimas</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>

web.xml

5 初始化DAO配置信息。

StartupServlet里装载Dao的配置信息。

public class StartupServlet extends Action {

/**

* List of DAO files

*/

public final static String PARAM_DAO = "dao";

public ActionForward execute(ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws Exception{

// Get list of DAO files

initDAO();

logger.info("init DAO successfully");

return mapping.findForward("success");

}

/**

* Initialization of DAO environment

*/

private void initDAO() throws ServletException

{

//Constants.DAO的值为两配置文件名:/resources/config/dao-config.xml,/resources/config/dao-declaration.xml

StringTokenizer st = new StringTokenizer (Constants.DAO, ",");

while (st.hasMoreTokens())

{

String name = st.nextToken();

// Get associated resource

//获得配置文件的URL

URL url = getClass().getResource(name);

if (url == null)

{

throw new ServletException ("Cannot find resource for " + name);

}

else

{

try

{

//使用DAO工厂加载配置文件信息。

DAOFactory.addConfiguration (url);

}

catch (DAOFactoryException ex)

{

throw new ServletException ("Cannot initialize DAO", ex);

}

}

}

}

}

6 DAO工厂类 DAOFactory

根据输入的dao-object name来实例化DAO对象。

public abstract class DAOFactory {

//得到DAOObject

public static DAOObject getDAOObject(String daoName, DAOContext daoContext) throws DAOFactoryException

{

// Gets the DAO object declaration

// Gets the associated factory

// Creates DAO object

return factory.newDAOObject(objectDeclaration);

}

/**

* @see com.ibm.services.epricer.framework.dao.DAOFactory#newDAOObject(DAOObjectDeclaration)

*/

protected DAOObject newDAOObject(DAOObjectDeclaration objectDeclaration) throws DAOFactoryException

{

// Gets class

Class objectClass = (Class) classes.get(objectDeclaration.getName());

if (objectClass == null)

{

synchronized (classes)

{

try

{

objectClass = Class.forName(objectDeclaration.getClassName());

}

catch (ClassNotFoundException e)

{

throw new DAOFactoryException (this, "Cannot instantiate the DAO object class " + objectDeclaration.getClassName(), e);

}

classes.put(objectDeclaration.getName(), objectClass);

}

}

try

{

//初始化DAOObject,并将自己传入DAOObject

DAOObject object = (DAOObject) objectClass.newInstance();

object.init(this);

return object;

}

catch (Exception ex)

{

throw new DAOFactoryException(this, "Cannot create DAO object " + objectDeclaration.getName(), ex);

}

}

/**

* Add a configuration file for the DAO

*/

public synchronized static void addConfiguration(URL url) throws DAOFactoryException

{}

}

实现JDBCDAOFactory

public class JDBCDAOFactory extends DAOFactory {

/**

* Factory parameter, JDBC name of the Data source (example : jdbc/DataSource)

*/

public final static String PARAM_DATASOURCE = "datasource";

/**

* JDBC Data Source

*/

private DataSource dataSource;

private Logger logger;

/**

* Initializes the Data source.

*/

protected void init(Map parameters) throws DAOFactoryException

{

logger = Logger.getLogger(this.getClass());

// Gets the data source name

String dsName = (String)parameters.get (PARAM_DATASOURCE);

if (dsName == null)

{

throw new DAOFactoryException (this, "Cannot find 'datasource' parameter to initialize the DAO factory.");

}

else

{

try

{

// JNDI context

Context initialContext = new InitialContext ();

// Gets the data source

dataSource = (DataSource) initialContext.lookup(dsName);

}

catch (NamingException ex)

{

throw new DAOFactoryException (this, "Cannot find JDBC Data Source with JNDI name " + dsName, ex);

}

}

}

/**

* Gets a connection from the data source.

* First, this method try to get the registered connection from the <code>context</code>.

* If not found, a new connection is created and then registered into the <code>context</code>.

* @see JDBCDAOSource

* @param context Current context for DAO accesses

* @return The DAO source to use (for this factory, it is an instance of <code>JDBCDAOSource</code>

* @throws DAOFactoryException If the connection cannot be created.

*/

public DAOSource getDAOSource(DAOContext context) throws DAOFactoryException

{

// Gets the DAO source from the context

DAOSource source = context.getDAOSource(this);

if (source != null)

{

return source;

}

else

{

try

{

// Creates the connection

Connection connection = dataSource.getConnection();

Courie

分享到:
评论

相关推荐

    DAO技术的java编程

    DAO(Data Access Object)技术是Java编程中一种常见的数据访问模式,...通过使用DAO,我们可以构建一个清晰、可扩展的架构,有效地管理和操作数据库。在实际项目中,配合Oracle数据库,可以实现高效、安全的数据访问。

    初步认识JAVA DAO设计模式

    例如,STRUTS框架中的数据持久化可以通过DAO模式来实现,以降低组件间的耦合度,提高代码的可维护性和可扩展性。 DAO模式的组成部分通常包括以下几点: 1. **数据访问接口**:这是DAO的核心,定义了对数据源进行...

    数据库dao操作jdbc

    数据库DAO(Data Access Object)操作是Java编程中用于与数据库交互的一种常见模式。...然而,随着技术的发展,开发者越来越倾向于使用ORM框架,以减少手动编写JDBC代码的工作量,并提高代码的可维护性和可扩展性。

    DAO设计模式辅助资料

    DAO模式在实际项目中广泛应用,尤其在大型系统中,能够提高代码的可读性、可维护性和可扩展性。例如,当我们需要更换数据库系统(如从MySQL切换到Oracle),只需要修改DAO实现,而不需要改动大量的业务代码。 在...

    .DAO分层思想

    DAO(Data Access Object)分层思想是软件设计模式中一种常用的数据访问模式,它主要用于将业务逻辑与数据访问逻辑分离,提升代码的可维护性和可扩展性。在C#编程中,DAO层扮演着关键角色,它使得应用程序可以与...

    Dao.rar_dao

    在Java或.NET等编程语言中,DAO模式被广泛应用于实现应用程序与数据库之间的交互。在本案例中,"Dao.rar_dao" 提供的文件集合似乎是一个关于DAO模式的C++项目。 1. **DAO设计模式**:DAO模式的核心思想是将业务逻辑...

    dao.rar_dao

    总结来说,"dao.rar_dao"提供的是一套基于JXVA框架的泛型DAO实现,旨在帮助开发者高效地处理数据库操作,提升代码的可维护性和可扩展性。通过对泛型DAO的深入理解和应用,可以更好地组织和管理项目中的数据访问层,...

    JAVA DAO模式浅析.pdf

    通过上述方式,DAO模式不仅实现了业务逻辑与数据访问的分离,还提高了代码的可重用性和可扩展性,使得应用程序更容易适应不断变化的数据库环境和技术需求。在实际项目开发中,结合使用DAO模式和其他设计模式(如工厂...

    dao.rar_DAO用法_dao_分层增删改

    DAO(Data Access Object)模式是软件开发中常用的一种设计模式,主要用于数据库操作的抽象和...同时,了解如何将DAO模式与其他设计模式(如工厂模式、单例模式等)结合使用,可以进一步提高代码的可扩展性和可维护性。

    StuDAO.rar_dao

    总结来说,"StuDAO.rar_dao"压缩包提供了一个学习DAO模式的实践案例,通过学习这个案例,开发者可以掌握如何设计和实现DAO,以及如何利用DAO模式来优化数据库操作,提高软件的可扩展性和可维护性。

    泛型dao

    在Java编程语言中,"泛型DAO"(Generic DAO)是一种设计模式,它允许开发者创建可重用的数据访问对象(DAOs),以处理多种不同类型的实体对象,而无需为每种对象编写单独的DAO实现。这种方法提高了代码的复用性和可...

    DAO工厂留言板java jsp Web开发

    1. **DAO模式**:DAO模式的核心思想是创建一个接口,该接口定义了对数据库进行操作的方法,然后为每个数据库实体创建一个实现了该接口的具体类。这样,业务层可以通过调用DAO接口的方法来处理数据,而不直接与数据库...

    工厂模式与DAO模式

    在软件设计模式中,工厂模式和DAO(Data Access Object)模式是两种常用的设计模式,它们在实际开发中扮演着至关重要的角色...通过深入理解和实践这两种模式,能够提升我们的编程技巧,使代码更具有灵活性和可扩展性。

    DAO层.doc

    在软件开发领域,特别是企业级应用开发中,为了提高代码的可读性、可维护性和可扩展性,通常会采用分层架构的设计模式。其中,数据访问层(Data Access Object, DAO)作为连接业务逻辑层与底层数据存储的关键组成...

    DAO登录注册管理系统

    该项目采用了面向对象编程(OOP)的思想,结合了DAO(Data Access Object)设计模式和MVC(Model-View-Controller)设计模式。其中: - **DAO设计模式**:定义了一组接口来封装对数据库的操作,使业务逻辑与数据访问...

    DAO模式(个人找的资料)

    在描述中提到的场景中,开发者在处理数据持久化时,决定采用DAO模式来提高代码的可维护性和可扩展性。 DAO模式的主要优点在于: 1. **松耦合**:业务组件如实体Bean、会话Bean、Servlets和JSP助手对象等与具体的...

    DAO设计模式设计一个论坛

    在实现这些DAO类时,我们通常会使用面向接口编程,定义DAO接口,然后为每个接口提供具体的实现。这样做的好处是可以在不修改业务代码的情况下,轻松地更换不同的数据存储方案(如从关系型数据库切换到NoSQL数据库)...

    DAO入门的实用例子

    综上所述,DAO模式是软件开发中处理数据访问的重要工具,它使得业务逻辑和数据访问层的耦合度降低,提高了代码的可扩展性和可维护性。通过学习和实践这个"DAO入门的实用例子",新手可以更好地理解和掌握DAO模式的...

    Java Web程序运用中泛型DAO的作用.pdf

    4. **提升拓展性**:当添加新的数据实体类时,只需简单地声明新的实体类类型,而无需修改已有的DAO实现,易于扩展。 5. **提高可维护性**:代码结构清晰,模块化程度高,易于理解和维护。 在Java Web框架如Struts和...

    DAOPattern(设计模式).pdf

    通过对DAO模式的理解与应用,可以有效地降低业务逻辑与数据访问之间的耦合度,提高系统的可维护性和扩展性。特别是在J2EE环境下,通过采用DAO模式,可以更好地管理和优化复杂的数据访问操作,确保系统的稳定运行。...

Global site tag (gtag.js) - Google Analytics