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

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

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

    隨筆-72  評論-20  文章-0  trackbacks-1

    Spring Framework最得以出名的是與Hibernate的無縫鏈接,基本上用Spring,就會用Hibernate。可惜的是Spring提供的 HibernateTemplate功能顯得不夠,使用起來也不是很方便。我們編程序時,一般先寫BusinessService,由 BusinessService調DAO來執行存儲,在這方面Spring沒有很好的例子,造成真正想用好它,并不容易。

    我們的思路是先寫一個BaseDao,仿照HibernateTemplate,將基本功能全部實現:


    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繼承出來,這樣寫其他的DAO,代碼就會很少。

    從BaseDao繼承出來EntityDao,專門負責一般實體的基本操作,會更方便。


    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);
        }


    }

    這樣我們就有了一個通用的Hibernate實體引擎,可以對任何Hibernate實體實現基本的增加、修改、刪除、查詢等。

    其它的BusinessService就可以繼承EntityManager,快速實現業務邏輯。

    具體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 2008-08-14 15:15 前方的路 閱讀(260) 評論(0)  編輯  收藏 所屬分類: Java技術
    主站蜘蛛池模板: 黄色免费在线观看网址| 亚洲heyzo专区无码综合| 日韩免费高清播放器| 亚洲国产日韩成人综合天堂| 国产精品亚洲片在线花蝴蝶| 无码国产亚洲日韩国精品视频一区二区三区| 亚洲第一区二区快射影院| 无码少妇一区二区浪潮免费| 中文字幕亚洲情99在线| 浮力影院第一页小视频国产在线观看免费 | 亚洲成a人片77777老司机| 成人电影在线免费观看| 亚洲男人天堂av| 日韩不卡免费视频| 亚洲日韩亚洲另类激情文学| 国产成人在线观看免费网站| 成年大片免费高清在线看黄| 亚洲精品无码mv在线观看网站| 成人黄网站片免费视频| 亚洲精品免费在线视频| 成人毛片18岁女人毛片免费看| 亚洲av日韩专区在线观看| 国产精品亚洲高清一区二区| 毛片免费在线观看| 亚洲伊人色一综合网| 国产免费资源高清小视频在线观看| 日本激情猛烈在线看免费观看| 亚洲成AV人片在线观看无| 国产片AV片永久免费观看| 色噜噜噜噜亚洲第一| 亚洲国产另类久久久精品黑人| 免费在线观看视频网站| 国产成人亚洲精品无码AV大片| 久久综合亚洲色HEZYO国产| 精品一区二区三区无码免费视频| 亚洲人成人网毛片在线播放| 久久精品亚洲乱码伦伦中文| 中国人xxxxx69免费视频| 色偷偷噜噜噜亚洲男人| 亚洲成AV人片在| 日韩一品在线播放视频一品免费|