<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    軟件藝術(shù)思考者  
    混沌,彷徨,立志,蓄勢(shì)...
    公告
    日歷
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導(dǎo)航

    隨筆分類(lèi)(86)

    隨筆檔案(85)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

     

    Spring Framework最得以出名的是與Hibernate的無(wú)縫鏈接,基本上用Spring,就會(huì)用Hibernate。可惜的是Spring提供的HibernateTemplate功能顯得不夠,使用起來(lái)也不是很方便。我們編程序時(shí),一般先寫(xiě)B(tài)usinessService,由BusinessService調(diào)DAO來(lái)執(zhí)行存儲(chǔ),在這方面Spring沒(méi)有很好的例子,造成真正想用好它,并不容易。

    我們的思路是先寫(xiě)一個(gè)BaseDao,仿照HibernateTemplate,將基本功能全部實(shí)現(xiàn):

    public class BaseDao extends HibernateDaoSupport{

        private Log log = LogFactory.getLog(getClass());

        public Session openSession() {
            return SessionFactoryUtils.getSession(getSessionFactory(), false);
        }

        public Object get(Class entityClass, Serializable id) throws DataAccessException {
            Session session = openSession();
            try {
                return session.get(entityClass, id);
            }
            catch (HibernateException ex) {
                throw SessionFactoryUtils.convertHibernateAccessException(ex);
            }
        }

        public Serializable create(Object entity) throws DataAccessException {
            Session session = openSession();
            try {
                return session.save(entity);
            }
            catch (HibernateException ex) {
                throw SessionFactoryUtils.convertHibernateAccessException(ex);
            }
        }

    ...

    其它的DAO,從BaseDao繼承出來(lái),這樣寫(xiě)其他的DAO,代碼就會(huì)很少。

    從BaseDao繼承出來(lái)EntityDao,專(zhuān)門(mén)負(fù)責(zé)一般實(shí)體的基本操作,會(huì)更方便。

    public interface EntityDao {

        public Object get(Class entityClass, Serializable id) throws DataAccessException;

        public Object load(Class entityClass, Serializable id) throws DataAccessException;

        public Serializable create(Object entity) throws DataAccessException;
    ...}

    /**
     * Base class for Hibernate DAOs.  This class defines common CRUD methods for
     * child classes to inherit. User Sping AOP Inteceptor
     */
    public class EntityDaoImpl extends BaseDao implements EntityDao{

    }

    為了Transaction的控制,采用AOP的方式:

    public interface EntityManager {

        public Object get(Class entityClass, Serializable id);

        public Object load(Class entityClass, Serializable id);

        public Serializable create(Object entity);
    ...

    }

    /**
     * Base class for Entity Service. User Sping AOP Inteceptor
     */
    public class EntityManagerImpl implements EntityManager {

        private EntityDao entityDao;

        public void setEntityDao(EntityDao entityDao) {
            this.entityDao = entityDao;
        }

        public Object get(Class entityClass, Serializable id) {
            return entityDao.get(entityClass, id);
        }

        public Object load(Class entityClass, Serializable id) {
            return entityDao.load(entityClass, id);
        }
    ...

    }

    這樣我們就有了一個(gè)通用的Hibernate實(shí)體引擎,可以對(duì)任何Hibernate實(shí)體實(shí)現(xiàn)基本的增加、修改、刪除、查詢(xún)等。

    其它的BusinessService就可以繼承EntityManager,快速實(shí)現(xiàn)業(yè)務(wù)邏輯。

    具體XML配置如下:

     <!-- Oracle JNDI DataSource for J2EE environments -->
     <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
      <property name="jndiName"><value>java:comp/env/jdbc/testPool</value></property>
     </bean>

     <!-- Hibernate SessionFactory for Oracle -->
     <!-- Choose the dialect that matches your "dataSource" definition -->
     <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
      <property name="dataSource"><ref local="dataSource"/></property>
      <property name="mappingResources">
       <value>user-hbm.xml</value>
      </property>
      <property name="hibernateProperties">
       <props>
        <prop key="hibernate.dialect">net.sf.hibernate.dialect.OracleDialect</prop>
        <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.Provider</prop>
        <prop key="hibernate.cache.use_query_cache">true</prop>
                      <prop key="hibernate.show_sql">false</prop>
       </props>
      </property>
     </bean>

     <!-- AOP DAO Intecepter -->
            <bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
              <property name="sessionFactory">
                <ref bean="sessionFactory"/>
              </property>
            </bean>

            <bean id="entityDaoTarget" class="com.gpower.services.entity.dao.EntityDaoImpl">
              <property name="sessionFactory">
                <ref bean="sessionFactory"/>
              </property>
            </bean>

            <bean id="entityDao" class="org.springframework.aop.framework.ProxyFactoryBean">
              <property name="proxyInterfaces">
                <value>com.gpower.services.entity.dao.EntityDao</value>
              </property>
              <property name="interceptorNames">
                <list>
                  <value>hibernateInterceptor</value>
                  <value>entityDaoTarget</value>
                </list>
              </property>
            </bean>

     <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
     <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
      <property name="sessionFactory"><ref local="sessionFactory"/></property>
     </bean>

     <!-- Transaction manager that delegates to JTA (for a transactional JNDI DataSource) -->
     <!--
     <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
     -->

     <!-- Transactional proxy for the Application primary business object -->
            <bean id="entityManagerTarget" class="com.gpower.services.entity.EntityManagerImpl">
              <property name="entityDao">
                <ref bean="entityDao"/>
              </property>
            </bean>

            <bean id="entityManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
              <property name="transactionManager">
                <ref bean="transactionManager"/>
              </property>
              <property name="target">
                <ref bean="entityManagerTarget"/>
              </property>
              <property name="transactionAttributes">
         <props>
           <prop key="get*">PROPAGATION_SUPPORTS</prop>
           <prop key="*">PROPAGATION_REQUIRED</prop>
         </props>
              </property>
            </bean>


    posted on 2006-07-05 16:14 智者無(wú)疆 閱讀(244) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
     
    Copyright © 智者無(wú)疆 Powered by: 博客園 模板提供:滬江博客


       觀音菩薩贊

    主站蜘蛛池模板: 美女黄频视频大全免费的| 久久久久亚洲AV成人网| 91频在线观看免费大全| 久久国产精品免费视频| 本免费AV无码专区一区| 国产美女视频免费观看的网站| 免费一级全黄少妇性色生活片| 日韩亚洲综合精品国产| 国产精品亚洲专区无码不卡| 精品亚洲福利一区二区| 美女视频黄频a免费| 人碰人碰人成人免费视频| 一级午夜a毛片免费视频| 国产免费区在线观看十分钟 | 亚洲视频在线免费| 亚洲真人日本在线| 亚洲一区精品无码| 久久精品国产精品亚洲精品| 久久精品国产亚洲AV麻豆~| 内射干少妇亚洲69XXX| 亚洲白色白色永久观看| 国产成人亚洲综合一区| 亚洲人成网站18禁止| 亚洲丰满熟女一区二区哦| 黄色一级视频免费| 91成人免费福利网站在线| 毛片无码免费无码播放| 免费AA片少妇人AA片直播| 日韩一区二区免费视频| 精品国产人成亚洲区| 亚洲AV无码乱码在线观看裸奔| 色拍自拍亚洲综合图区| ASS亚洲熟妇毛茸茸PICS| 国产精品无码亚洲精品2021| 一级一级一级毛片免费毛片| 日韩免费视频一区二区| 无码国产精品一区二区免费 | 日韩电影免费在线观看中文字幕| 久久久久高潮毛片免费全部播放| 久久综合AV免费观看| 亚洲毛片av日韩av无码|