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>

  • 相关阅读:
    拉格朗日乘数法
    凸优化
    2018-2-13-安装visualStudio-出现-cant-install-Microsoft.TeamFoundation.OfficeIntegration.Resources...
    2019-11-9-win10-支持默认把触摸提升-Pointer-消息
    2019-7-1-Roslyn-让编译时候-Message-内容默认输出
    2019-8-31-win2d-通过-CanvasActiveLayer-画出透明度和裁剪
    2019-10-4-C#-极限压缩-dotnet-core-控制台发布文件
    2019-8-31-dotnet-获取指定进程的输入命令行
    2019-8-30-PowerShell-通过-WMI-获取系统安装的驱动
    2018-8-10-VisualStudio-2017-项目格式-自动生成版本号
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4313885.html
Copyright © 2011-2022 走看看