Spring整合Hibernate的步骤

来源:互联网 发布:vb right函数怎么用 编辑:程序博客网 时间:2024/04/29 04:30

为什么要整合Hibernate

1、使用SpringIOC功能管理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
原创粉丝点击