zoukankan      html  css  js  c++  java
  • Spring整合Hibernate的步骤

    为什么要整合Hibernate?
    1、使用Spring的IOC功能管理SessionFactory对象
     LocalSessionFactoryBean
    2、使用Spring管理Session对象
     HibernateTemplate
    3、使用Spring的功能实现声明式的事务管理

    整合Hibernate的步骤:
    1、配置SessionFactory(能够自己主动完毕)
     <bean id="sessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
      <property name="configLocation"
       value="classpath:hibernate.cfg.xml">
      </property>
     </bean>

    2、配置HibernateTemplate,用于完毕数据操作
     <bean id="hibernateTemplete" class="org.springframework.orm.hibernate3.HibernateTemplate">
      <property name="sessionFactory" ref="sessionFactory"></property>
     </bean>

    3、让Common继承HibernateDaoSupport类,该类提供了HibernateTemplate的getter和setter方法。

    4、将hibernateTemplete注入到Common中
     <bean id="common" class="com.aptech.common.Common">
      <property name="hibernateTemplate" ref="hibernateTemplete"></property>
     </bean>

    5、将Common的方法改动成hibernateTemplete的操作。
    package com.aptech.common;

    import java.sql.SQLException;
    import java.util.List;

    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.springframework.dao.DataAccessException;
    import org.springframework.orm.hibernate3.HibernateCallback;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    import com.aptech.exception.CommonException;
    import com.aptech.htm.HibernateSessionFactory;
    /**
     * 通用类,不再负责事务处理
     * 目标对象
     * @author 李赞红
     *
     * @param <POJO>
     */
    public class Common<POJO> extends HibernateDaoSupport implements ICommon<POJO> {
     public void insertObject(POJO pojo) throws CommonException {
      try {
       this.getHibernateTemplate().save(pojo);
      } catch (DataAccessException e) {
       e.printStackTrace();
       throw new CommonException(e);
      }
     }

     public void updateObject(POJO pojo) throws CommonException {
      try {
       this.getHibernateTemplate().update(pojo);
      } catch (DataAccessException e) {
       e.printStackTrace();
       throw new CommonException(e);
      }
     }

     public void deleteObject(Class theClass, long id) throws CommonException {
      try {
       Object obj = this.getHibernateTemplate().load(theClass, id);
       this.getHibernateTemplate().delete(obj);
      } catch (DataAccessException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
       throw new CommonException(e);
      }
     }

     public POJO loadObject(Class theClass, long id) throws CommonException {
      try {
       Object obj = this.getHibernateTemplate().load(theClass, id);
       return (POJO) obj;
      } catch (DataAccessException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
       throw new CommonException(e);
      }
     }

     public List queryObjects(final String hql) throws CommonException {
      class Hc implements HibernateCallback{
       public Object doInHibernate(Session session)
         throws HibernateException, SQLException {
        return session.createQuery(hql).list();
       }
      }
      
      try {
       return this.getHibernateTemplate().executeFind(new Hc());
      } catch (DataAccessException e) {
       e.printStackTrace();
       throw new CommonException(e);
      }
     }

     public List queryObjects(Class theClazz) throws CommonException {
      return this.queryObjects("from " + theClazz.getSimpleName());
     }
    }


    6、配置事务
    <!-- 事务管理器,相当于TransactionProxy,定义事务的开启、提交、回滚 -->
     <bean id="htm" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
      <property name="sessionFactory">
       <ref bean="sessionFactory"/>
      </property>
     </bean>
     <bean id="ti" class="org.springframework.transaction.interceptor.TransactionInterceptor">
      <property name="transactionManager">
       <ref bean="htm"/>
      </property>
      <property name="transactionAttributes">
       <props>
        <!-- key:方法名称 -->
        <prop key="insert*">PROPAGATION_REQUIRED</prop>
        <prop key="update*">PROPAGATION_REQUIRED</prop>
        <prop key="delete*">PROPAGATION_REQUIRED</prop>
        <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
        <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
       </props>
      </property>
     </bean>
     
     <!-- 自己主动代理,代理业务对象 -->
     <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
      <property name="beanNames">
       <list>
        <value>common</value>
       </list>
      </property>
      <property name="interceptorNames">
       <list>
        <value>ti</value>
       </list>
      </property>
     </bean>

    7、将common注入Dao
     <bean id="baseDao" abstract="true">
      <property name="common">
       <ref bean="common"/>
      </property>
     </bean>
     
     <bean id="udao" class="com.aptech.dao.impl.UserDao" parent="baseDao"></bean>
     <bean id="rdao" class="com.aptech.dao.impl.RoleDao" parent="baseDao"></bean>


    8、将Dao注入Service
     <bean id="grantService" class="com.aptech.service.impl.GrantService">
      <property name="rdao" ref="rdao"></property>
      <property name="udao" ref="udao"></property>
     </bean>

  • 相关阅读:
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1131 Subway Map (30 分)
    PAT 甲级 1131 Subway Map (30 分)
    AcWing 906. 区间分组 区间贪心
    AcWing 907. 区间覆盖 区间贪心
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4008617.html
Copyright © 2011-2022 走看看