Spring整合Hibernate的步骤

为什么要整合 Hibernate

1 、使用Spring IOC 功能管理SessionFactory 对象

 LocalSessionFactoryBean

2 、使用Spring 管理Session 对象 

 HibernateTemplate

3 、使用Spring 的功能实现声明式的事务管理

整合 Hibernate 的步骤:

1 、配置SessionFactory (可以自动完成)

 <beanid="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类,该类提供了HibernateTemplategettersetter方法。

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 implementsICommon<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) throwsCommonException {

  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) throwsCommonException {

  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) throwsCommonException {

  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) throwsCommonException {

  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: 方法名称 -->

    <propkey="insert*">PROPAGATION_REQUIRED</prop>

    <propkey="update*">PROPAGATION_REQUIRED</prop>

    <propkey="delete*">PROPAGATION_REQUIRED</prop>

    <propkey="load*">PROPAGATION_REQUIRED,readOnly</prop>

    <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>

   </props>

  </property>

 </bean>

 

 <!-- 自动代理,代理业务对象 -->

 <beanclass="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>

 最近整理了学习材料,有需要的请下载,我放微信里面了,方便下载,还能交流,扫描我的二维码头像即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值