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

来源:互联网 发布:苏联1937经济数据 编辑:程序博客网 时间:2024/05/02 23:21

没有哪个 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行)进行查询

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 心悦会员过期了怎么办 美宝旅行证过期怎么办 施工员证过期3年怎么办 电脑上没声音了怎么办 电脑音频被删了怎么办 微信绑定不上qq怎么办 微信绑定qq频繁怎么办 qq绑定不了微信怎么办 微信绑定不了qq怎么办 微信号登录不上怎么办 微信号登不上去怎么办 微信忘记密码怎么办啊 微信密码忘记了怎么办 维a酸乳膏掉皮怎么办 用维a酸乳膏脱皮怎么办 微信红包发不了怎么办 红包一次发3个怎么办 红包没领删除了怎么办 不主动还钱的人怎么办 老婆要离婚我不想离怎么办 男人有外遇女人该怎么办 QQ里有人假冒你怎么办 微信有人冒充我怎么办 有人冒充我的qq怎么办 微信有人冒充你怎么办 海底捞8折会员卡怎么办 西安公交卡坏了怎么办 吃生大蒜胃疼怎么办 养竹子的水臭了怎么办 雾霾引起的咳嗽怎么办 招财竹叶子发黄怎么办 养的富贵竹水臭怎么办 3年水竹叶子发黄怎么办 蒸柜下面漏蒸汽怎么办 美国自驾游驾照怎么办 装修抽屉门大了怎么办 当私人教练老了怎么办 铁艺花架不赚钱怎么办 请的关公不要了怎么办 星月放久了黄了怎么办 信用卡多还了钱怎么办