創建了一個 DAO 類用來做所有的事情,包括查詢。查詢方法如下:
java 代碼 - public?List?query(Class?clazz,?String?sql,?List?params)?throws?DAOException;??
第一個參數是用來接受封裝的類。 有時候僅查詢一個字段,根本不用封裝:
java 代碼 - public?List?query(String?sql,?List?params)?throws?DAOException;?
如果封裝,就要考慮查詢結果字段到對象屬性的映射關系。根據公司的數據庫設計規范, 單詞之間用下劃線連起來。所以簡單的替換一下就可以了。比如 USER_NAME 字段就映 射到 userName 屬性。
如果查詢結果中的字段有多,那這個字段的值就只好丟棄;如果類的屬性有多,也不會給 它賦值。
分頁查詢。有時候會用到分頁查詢,所以添加了一個方法:
java 代碼 - public?Page?queryPage(Class?clazz,?String?sql,?List?params,?int?pageIndex,?int?pageSize)??
- ????????????throws?DAOException;??
Page 對象除了包含查詢結果外還有 totalNum 屬性,表示查詢總結果數。
表格封裝的查詢。有時候查詢語句是動態生成的,沒法確定查詢結果的字段個數,用類來 封裝顯然不合適。于是定義了一個通用的表格結構用來封裝,并添加了 queryTable() 方法: java 代碼 ? - public?DataTable?queryTable(String?sql)?throws?DAOException;???
- public?DataTable?queryTable(String?sql,?List?params,?int?pageIndex,?int?pageSize)?????
- ???????????????? throws?DAOException;???
DataTable 對象包含的其實就是一堆 HashMap。不過它同 Page 一樣有一個查詢總結果數, 而且添加了一些方法方便提取數據。這種查詢的使用方式如下:
java 代碼 ? - DAO?dao?=?DAO.getDAO(SOURCE_NAME);??
- DataTable?table?=?dao.queryTable("select?*?from?tt_test");??
- assertEquals(6,?table.getColumns());??
- Map?row?=?table.query("name",?"張三豐");???
- assertNotNull(row);??
靜態字段作為映射關系配置。有些字典表或配置表,一開始就被全部讀入并緩存起來。為 了少寫代碼,DAO 提供將靜態字段 TN 作為表名來查詢的方式。如果類中存在 String 類型的 靜態字段 TN,則可以使用這個方法:
java 代碼 ? - public?List?query(Class?clazz)?throws?DAOException;?
|