常言笑的家

          Spring, Hibernate, Struts, Ajax, RoR

          DAO層指南

          1.概述

             SpringSide的DAO層兩個(gè)特點(diǎn):

             1.DAO層與Business層合并,且省略DAO接口,用cglib方式實(shí)現(xiàn)AOP事務(wù)控制。

             2.基于范型的強(qiáng)基類,普通DAO類只要用聲明所要管理的Entity類型即擁有完整的CRUD操作。

             結(jié)果就是,普通的Manager類只有一個(gè)文件,數(shù)行代碼。

             同時(shí),當(dāng)邏輯比較復(fù)雜,Manager類比較龐大時(shí),可以內(nèi)部重構(gòu)拆分為Dao與Manager,但這個(gè)重構(gòu)行為是內(nèi)部的,不造成影響的。因?yàn)槠渌愓{(diào)用的始終是Manager。

          2. HibernateGenericDao

             SpringSide 在Spring HibernateDaoSupport基礎(chǔ)上封裝的DAO,功能如下:

             1.應(yīng)用范型,使得find(), get() 這些函數(shù)不再返回Object,不再需要強(qiáng)制類型轉(zhuǎn)換。

             2.提供各種finder的簡(jiǎn)便函數(shù)
                應(yīng)用了JDK5可變參數(shù)的hsql查詢函數(shù):List find(String hql, Object... s) 

                簡(jiǎn)單查詢的簡(jiǎn)化函數(shù):findBy(Class entityClass,String name,Object ) ,findUniqueBy(Class entityClass,String name, Object ),findByLike(Class entityClass,String name,Object ) 

             3.分頁函數(shù):Page pagedQuery(Criteria criteria, int pageNo, int pageSize) /Page pagedQuery(String hql, int pageNo, int pageSize, Object... args) 。

             4.判別對(duì)象屬性在數(shù)據(jù)庫中唯一的函數(shù):isNotUnique(entityClass, Object entity, String names)。

          3. HibernateEntityDao

              所有UserManager, ProductManager之類只管理一類對(duì)象的Manager類的基類,只需要在類定義處聲明Entity類型即可

          								public class BookManager extends HibernateEntityDao<Book> {}

          4. IBatisGenericDao

             SpringSide 在Spring SqlMapClientDaoSupport基礎(chǔ)上封裝的DAO,功能如下:

             1.應(yīng)用范型,使得find(), get() 這些函數(shù)不再返回Object,不再需要強(qiáng)制類型轉(zhuǎn)換。

             2.提供各種finder的簡(jiǎn)便函數(shù)
                應(yīng)用了JDK5可變參數(shù)的hsql查詢函數(shù):List find(String hql, Object... s) 

                簡(jiǎn)單查詢的簡(jiǎn)化函數(shù):findBy(Class entityClass,String name,Object ) ,findUniqueBy(Class entityClass,String name, Object ),findByLike(Class entityClass,String name,Object ) 

             3.分頁函數(shù):Page pagedQuery(Criteria criteria, int pageNo, int pageSize) /Page pagedQuery(String hql, int pageNo, int pageSize, Object... args) 。

              4.由于IBatis本身的特性,因此有少數(shù)方法的使用和HiberGenericDAO不太一樣,如save傳入的必須是一個(gè)指定操作方式的map(參看helloworld下面的UserManagerIBatisTest)

          5. IBatisEntityDao

              所有UserManager, ProductManager之類只管理一類對(duì)象的Manager類的基類,只需要在類定義處聲明Entity類型即可

          								public class BookManager extends IBatisEntityDao<Book> {}

          posted on 2006-12-16 22:42 常言笑 閱讀(824) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA/J2EE

          My Links

          Blog Stats

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 龙游县| 辽阳县| 武邑县| 闸北区| 沧州市| 凤庆县| 宜宾市| 五大连池市| 石景山区| 富民县| 涿州市| 尤溪县| 金寨县| 乐至县| 九龙坡区| 佛坪县| 高要市| 天祝| 神木县| 东光县| 清徐县| 峨山| 山西省| 精河县| 西乌| 汕尾市| 二连浩特市| 锡林浩特市| 阿拉善左旗| 棋牌| 曲水县| 东宁县| 志丹县| 石台县| 龙川县| 科尔| 兴和县| 南宁市| 达孜县| 读书| 五常市|