spring与hibernate整合

原创 2016年08月30日 16:23:47

为什么要整合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>

版权声明:本文为博主原创文章,未经博主允许不得转载。

详细解释Spring与Hibernate的整合原理

spring与hibernate的整合
  • canot
  • canot
  • 2016年01月13日 17:38
  • 4758

spring与hibernate整合(三种方式)

Spring与Hibernate整合关键点:          1) Hibernate的SessionFactory对象交给Spring创建;          2) hibernate事务交给...
  • u014010769
  • u014010769
  • 2015年07月31日 20:33
  • 3408

Spring mvc+Spring+hibernate整合

有段时间没有更新博客了,跟最近比较忙有关系。无聊搭建个Java web框架,反正好久没有自己搭建框架了,算是练练手了,今天我就来搭建一个框架,技术选型为Spring mvc+Spring+hibern...
  • hhs1314520
  • hhs1314520
  • 2016年07月20日 20:55
  • 5539

Struts1+Spring+Hibernate3.3整合笔记

ssh整合   ssh(struts+spring+hibernate) 三大框架配合使用来开发项目,是目前java ee 最流行的开发方式,必须掌握.     设计: 这我们通过一个实际的案例,来讲...
  • a2459956664
  • a2459956664
  • 2016年12月10日 10:35
  • 505

spring整合hibernate的两种方式

我们学过spring的同学都知道,spring可以整合其他的框架协同开发,大大的降低开发的时间和提高了效率,但是我们在配置的时候总会发生各种各样的问题,下面我记录一下我在配置的时候出现的问题和简单总结...
  • xujin_chen
  • xujin_chen
  • 2016年12月10日 11:37
  • 3258

Spring+Hibernate整合开发配置,完整实例

hibernate spring 配置
  • ZWX2445205419
  • ZWX2445205419
  • 2016年09月20日 00:48
  • 1069

spring spring+springMVC+hibernate整合

搭建一个项目,不单单是MVC,我们还需要涉及到数据访问层,这里就需要hibernate框架来实现。(实现数据访问的框架很多,这里学习hibernate) 一、创建一个web项目 首先我们需...
  • w410589502
  • w410589502
  • 2017年01月16日 16:00
  • 1628

SpringData,Spring与Hibernate整合小记

Repository SpringData Hibernate
  • W1025514023
  • W1025514023
  • 2016年11月12日 21:34
  • 671

Java 常用框架(Spring,SpringMVC,Hibernate,mybatis)整合

每一个web工程里在WEB-INF目录下都有一个文件web.xml, 这个文件是web工程的入口文件,每一个容器(tomcat)都是去解析web.xml。web.xml 里可以增加servlet例如:...
  • liiuijkiuu
  • liiuijkiuu
  • 2016年10月24日 22:54
  • 788

Spring 学习笔记(七) SpringMVC与Hibernate的整合

前言 1.为节省时间,博主提供了一个已经写好基础SpringMVC代码的Demo,读者可以试着在此基础上修改。https://github.com/Wuchenwcf/MyCode/tree/mast...
  • luchengtao11
  • luchengtao11
  • 2017年04月28日 20:45
  • 777
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring与hibernate整合
举报原因:
原因补充:

(最多只允许输入30个字)