The important thing in life is to have a great aim , and the determination

          常用鏈接

          統計

          IT技術鏈接

          保險相關

          友情鏈接

          基金知識

          生活相關

          最新評論

          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行)進行查詢

          posted on 2007-03-15 23:21 鴻雁 閱讀(277) 評論(0)  編輯  收藏

          主站蜘蛛池模板: 石柱| 凤城市| 新巴尔虎右旗| 集安市| 佛坪县| 年辖:市辖区| 渝北区| 澄江县| 惠安县| 南京市| 凤阳县| 马鞍山市| 南皮县| 沙河市| 英超| 晋城| 乌兰察布市| 衡山县| 安陆市| 安吉县| 辉南县| 宝鸡市| 紫金县| 炎陵县| 响水县| 白山市| 新巴尔虎右旗| 循化| 伊宁县| 神农架林区| 重庆市| 灵丘县| 茂名市| 二连浩特市| 尼玛县| 福建省| 公安县| 象州县| 神木县| 清涧县| 息烽县|