`
yiding_he
  • 浏览: 446159 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

DAO 设计1、DAO 配置文件的设计

阅读更多
没有哪个 DAO 能够包揽所有的数据库管理。每种 DAO 都有各自的定位。我们公司的项目有这样一些特点:
  • 所用数据库都是 Oracle;
  • 使用一些已有的数据库表;
  • 查询语句要经过优化,DBA 要对其字斟句酌;
  • 同时连接多个数据库。
我们的项目大都会用到一些其他系统现有的表。有的表包含四五十个字段,而对于某些业务逻辑来讲只需要查询一两个字段的值。DBA 强烈反对“select * ”,对关联查询、嵌套查询的性能要求也很严格。所以像 Hibernate 这样自动生成 SQL 语句的 DAO 自然不敢用。我们需要自己设计一个 DAO。

本着够用就行的原则,我们设计的 DAO (下面简称 DAO)先定下一个很低的目标:实现数据库连接管理,SQL 语句由使用者提供,将查询结果进行简单的封装。

数据库连接管理的具体设计是:
1、使用 XML 配置文件配置数据库连接;
2、支持 JDBC 和 JNDI(主要针对 WebLogic 的连接池) 两种方式创建数据库连接;
3、对同时连接多个数据库进行管理;
4、使用者不需关心数据库连接的创建和关闭。

对 XML 配置文件的设计:
    DAO 配置文件用来配置数据库连接。鉴于当前的目标,DAO 没有映射关系配置。

    配置文件将数据库抽象为“数据源”(DataSource),DAO 管理的是数据源。一个项目中可以存在多个数据源。数据源包含一个或多个连接配置,但运行时只会启用其中的一个,这样是为了方便修改配置,像 Rails 的 数据库配置文件中同时配置了开发环境、测试环境和产品环境三中数据库连接,一样的道理。

    连接配置有 JNDI 和 JDBC 两种类型,分别需要不同的参数。JNDI 配置需要 JNDI 服务器、InitialContextFactory 类和 JNDI 名称三个参数,而JDBC 配置需要 Driver、url、用户名和密码四个参数。密码暂时不考虑加密,采用明文的方式。下面是一个配置文件的例子:
xml 代码
 
  1. <?xml version="1.0" encoding="GB2312" ?>  
  2. <!DOCTYPE dao-config PUBLIC  
  3.         "-//Chinacreator, Ltd.//Data Access Object Library 1.2//CN" "dao-config.dtd">  
  4.   
  5. <dao-config>  
  6.   
  7.     <datasource name="local_mysql" connection="default">  
  8.         <description>数据源1</description>  
  9.         <connection name="default" type="jdbc">  
  10.             <property name="driver" value="com.mysql.jdbc.Driver"/>  
  11.             <property name="url" value="jdbc:mysql://localhost/test"/>  
  12.             <property name="username" value="user"/>  
  13.             <property name="password" value="user"/>  
  14.         </connection>  
  15.     </datasource>  
  16.   
  17.     <datasource name="demo" connection="jdbc_connection">  
  18.         <description>数据源2</description>  
  19.   
  20.         <connection name="jndi_connection" type="jndi">  
  21.             <description>JNDI 方式</description>  
  22.             <property name="driver" value="weblogic.jndi.WLInitialContextFactory"/>  
  23.             <property name="server" value="t3://127.0.0.1:7010"/>  
  24.             <property name="jndiname" value="jndi/name"/>  
  25.         </connection>  
  26.   
  27.         <connection name="jdbc_connection" type="jdbc">  
  28.             <description>JDBC 方式</description>  
  29.             <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>  
  30.             <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:SidName"/>  
  31.             <property name="username" value="username"/>  
  32.             <property name="password" value="password"/>  
  33.         </connection>  
  34.   
  35.         <connection name="pooled_jdbc" type="jdbc">  
  36.             <description>带连接池的 JDBC 方式</description>  
  37.             <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>  
  38.             <property name="url" value="jdbc:oracle:thin:@172.16.168.85:1521:ora9i01"/>  
  39.             <property name="username" value="username"/>  
  40.             <property name="password" value="password"/>  
  41.             <property name="usepool" value="true"/>  
  42.             <property name="poolsize" value="2"/>  
  43.         </connection>  
  44.     </datasource>  
  45. </dao-config>  



    那么使用者如何使用 DAO 执行 SQL 呢?下面是一个最简单的例子:
java 代码
  1. DAO dao = DAO.getDAO("demo"); // "demo" 是数据源的名称,见配置文件 17 行
  2. List list = dao.query("select areaname from tb_pub_area_code");  
  3. assertEquals("长沙", list.get(0));  

    在这个例子中,DAO 根据配置文件找到数据源“demo”(17行),再根据数据源的 connection 属性找到名为"jdbc_connection" 的连接配置(27行),然后连接到 "jdbc:oracle:thin:@127.0.0.1:1521:SidName" (30行)进行查询


待续...
分享到:
评论
11 楼 itroop 2007-04-03  
我正在学习这个希望版主能发个配置数据源获得数据源链接访问数据库的实例工程
10 楼 andyandyandy 2007-04-03  
这是探索精神,好,支持楼主的好东西
9 楼 ak478288 2007-04-02  
这不是重复的发明轮子,而是开拓思维的方式,如果不开拓思维,就不会有多样化的技术产生
8 楼 elfer 2007-03-30  
支持原创,为什么不自己多想想,要用别人的呢??
7 楼 yananay 2007-03-07  
你们得写事务控制,2段式提交等等,
其实用 spring + ibatis,这样的东西都很好实现。
ibatis也不是特别麻烦,有精力重复一个轮子,
不如弄一个方便ibatis的工具.
6 楼 yiding_he 2007-03-06  
当时的想法是 DAO 包最好独立,不根任何框架有联系(Log4j除外)。
5 楼 刑天战士 2007-03-05  
why not use spring instead of a home-made xml configuration?
4 楼 retreat 2007-03-05  
hb本身也可以配置多个的ds的!why?why?why? 搞不通why?
3 楼 21jhf 2007-03-05  
等待你继续.........
2 楼 yiding_he 2007-02-27  
iBatis 我早就看过,它还是太麻烦了。本文提到的 DAO 实际上已经完成,这篇文章(目前只是第一篇)是一个回顾性的东西,希望能对有兴趣的朋友提供一点价值。
1 楼 IvanLi 2007-02-27  
你看看iBatis,就不会重复发明轮子了

相关推荐

    系统配置文件 dao350和dao360

    标题中的“系统配置文件 dao350和dao360”指的是Microsoft Office系统中的数据库访问对象(DAO,Database Access Objects)版本350和360。DAO是Microsoft Jet数据库引擎的一部分,主要用于与Access数据库或其他Jet...

    mybatis-generator自动生成Dao和xml文件的配置文件

    mybatis-generator自动生成Dao和xml文件的配置文件

    DAO设计模式.rar

    DAO(Data Access Object)设计模式是一种软件设计模式,主要用于数据库操作的封装,它将业务逻辑与数据访问逻辑分离,提供了一种标准的方式来访问底层的数据存储系统。DAO模式在实际开发中有着广泛的应用,尤其是在...

    mybatis自动生成mapper、dao和entity配置文件

    mybatis自动生成mapper、dao和entity配置文件,将文件放在classpath路径下

    mybatis 自动生成 pojo mapper dao 层配置文件

    mybatis 自动生成 pojo mapper dao 层配置文件

    Dao设计模式

    1. Java集合框架:在DAO设计模式中,需要熟练使用Java集合框架来存储和操作数据。其中,Collection接口是所有集合类的根接口,包含允许重复元素的List和不允许重复元素的Set。List接口的典型实现包括ArrayList和...

    DAO设计模式精讲(java web开发)

    4. **配置**:如果使用ORM框架,需要配置映射文件或使用注解指定数据源和实体类关系。 5. **在业务层中使用**:通过依赖注入(如Spring)或者new实例的方式,引入DAO并调用其方法。 **示例** 例如,创建一个...

    spring几种Dao支持配置

    1. **JDBC DAO支持:** Spring通过`JdbcTemplate`和`SimpleJdbcInsert`等类提供了对JDBC的抽象,减少了直接使用JDBC代码的繁琐性。`JdbcTemplate`提供了一组模板方法,如`queryForList`、`update`等,用于执行SQL...

    Java Dao设计模式操作数据库

    项目_jdbc可能包含了实现上述功能的源代码,包括DAO接口及其实现、JDBC相关的配置文件(如数据库连接字符串、用户名和密码)、以及测试类。通过查看这些文件,你可以更深入地了解如何在实际项目中应用Java DAO模式和...

    基于JavaScript的Vue前端框架DAO设计源码

    该项目是一款采用JavaScript编写的Vue前端框架DAO设计源码,总计包含77个文件,涵盖35个PNG图片文件、21个JavaScript文件、6个CSS样式文件、4个JSON配置文件、2个Vue组件文件、2个字体文件、1个Git忽略文件、1个...

    基于MVC的论坛(用到struts+dao设计模式)

    1. **请求调度**:Struts的DispatcherServlet负责接收并转发所有的HTTP请求,根据配置文件(struts.xml)决定调用哪个Action。 2. **动作映射**:ActionMapping定义了Action类与URL的映射关系,使得不同的HTTP请求...

    Mybatis基于数据库表配置生产DAO,Mapper配置文件

    1. **Mybatis Generator配置**:在使用Mybatis Generator之前,我们需要创建一个配置文件,通常命名为`generatorConfig.xml`。在这个文件中,我们将指定数据库连接信息(如URL、用户名、密码),以及需要生成代码的...

    JSP+DAO实现文件上传系统

    - 配置文件大小限制、类型检查等安全策略。 - 创建DAO实例,为后续文件操作做好准备。 综上所述,“JSP+DAO实现文件上传系统”是一个典型的Web应用案例,涉及到了前端用户交互、后端业务处理和数据库操作等多个方面...

    java SSM中dao层配置文件

    而`applicationContext-dao.xml`是DAO层的配置文件,它是Spring框架的一部分,负责配置数据访问组件和相关依赖。 在`applicationContext-dao.xml`中,通常包含以下关键知识点: 1. **数据源配置**:首先,我们需要...

    DAO程序设计相关点

    - 避免硬编码数据库连接信息,应该使用配置文件或环境变量存储这些敏感数据。 - 使用预编译的 `PreparedStatement` 来防止SQL注入攻击,即使在这个例子中没有使用,但在实际开发中应当养成良好习惯。 8. **单元...

    struts2 dao 原理与设计方案

    Struts2 DAO(数据访问对象)原理与设计方案是构建企业级Java应用中不可或缺的一部分,它主要负责处理数据的持久化,即将Java对象存入数据库、文件或XML文档等持久存储介质。DAO的主要目的是将数据访问的逻辑从业务...

    基于C语言的Dao编程语言设计源码

    项目文件共计225个,其中包含126个Dao源文件、39个C源文件、36个C头文件、9个C++源文件、3个文本文件、2个Vim配置文件、1个ChangeLog文件、1个daomake工具文件、1个README文件、1个配置文件。这个项目旨在构建一个...

    Dao3.5数据库引擎

    5. **错误排查**:如果安装后问题仍未解决,可能需要检查MCGS的配置文件,确保数据库连接参数正确无误,或者检查数据库本身是否存在故障。 6. **日志分析**:查看安装过程中的日志文件,可以帮助诊断安装过程中遇到...

    DAO的设计模式 里面transfer 数据库的映射

    通过MyBatis的配置文件,将SQL语句与DAO接口方法绑定,再通过MyBatis提供的SqlSession接口执行这些方法,即可完成数据的增删改查。 以转账操作为例,我们可以创建一个`AccountDAO`接口: ```java public interface...

    DAO设计模式开发案例-核心理念

    这可能是预留的文件夹,用于存放具体的DAO实现类、实体类等相关代码,或者存放数据库脚本、配置文件等。 总的来说,DAO设计模式是Java开发中的重要工具,尤其在数据访问层的设计中起到关键作用。通过理解和熟练...

Global site tag (gtag.js) - Google Analytics