为什么要整合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的步骤的更多相关文章

  1. Spring整合Hibernate详细步骤

    阅读目录 一.概述 二.整合步骤 回到顶部 一.概述 Spring整合Hibernate有什么好处? 1.由IOC容器来管理Hibernate的SessionFactory 2.让Hibernate使 ...

  2. Spring整合Hibernate图文步骤

    首先建立java Project工程 点击Finish完成 添加Hibernate和Spring所需要的jar包还有Mysql连接的jar包 创建Dao层,Dao层实现,Model层,Service层 ...

  3. 使用Spring整合Hibernate,并实现对数据表的增、删、改、查的功能

    1.1 问题 使用Spring整合Hibernate,并实现资费表的增.删.改.查. 1.2 方案 Spring整合Hibernate的步骤: 1.3 步骤 实现此案例需要按照如下步骤进行. 采用的环 ...

  4. 【SSH】spring 整合 hibernate

    spring-hibernate-1.2.9.jar applicationContext.xml <bean id="sessionFactory" class=" ...

  5. spring整合hibernate的详细步骤

    Spring整合hibernate需要整合些什么? 由IOC容器来生成hibernate的sessionFactory. 让hibernate使用spring的声明式事务 整合步骤: 加入hibern ...

  6. spring整合hibernate

    spring整合hibernate包括三部分:hibernate的配置.hibernate核心对象交给spring管理.事务由AOP控制 好处: 由java代码进行配置,摆脱硬编码,连接数据库等信息更 ...

  7. spring 整合hibernate

    1. Spring 整合 Hibernate 整合什么 ? 1). 有 IOC 容器来管理 Hibernate 的 SessionFactory2). 让 Hibernate 使用上 Spring 的 ...

  8. Spring 整合 Hibernate

    Spring 整合 Hibernate •Spring 支持大多数流行的 ORM 框架, 包括 Hibernate JDO, TopLink, Ibatis 和 JPA. •Spring 对这些 OR ...

  9. Spring整合Hibernate(转)

    概述 Spring整合Hibernate有什么好处? 1.由IOC容器来管理Hibernate的SessionFactory 2.让Hibernate使用上Spring的声明式事务 整合步骤 整合前准 ...

随机推荐

  1. The Power of Reading——英语学习小技巧之七

    This method is "The Power of Reading" and it comes from an article by Dr.Stephen Krashen. ...

  2. 子进程管理模块subprocess

    subprocess模块允许你生成子进程,连接管道,并获取返回的代码. 一.使用subprocess模块 模块中定义了一个Popen类:       subprocess.Popen(args, bu ...

  3. python中的字符串和数字连接

    1. 将数字强制转换成字符串 i = 1000 str1 = "hello" print str1 + str(i) 2. 格式化成字符串 i = 1000 str1 = &quo ...

  4. mysql-5.6.17-winx64 免安装 配置

    [client] default_character_set=utf8 port=3306 [mysql] # 设置mysql客户端默认字符集 default_character_set=utf8 [ ...

  5. qt实现-给SQLITE添加自定义函数

    需要使用sqlite里的password对某个字段进行加密,由于使用的sqlite是由QT封装好的QSqlDatabase,没有发现加载扩展函数的方法,所以自己实现了一个. 在网上也没找到相应的参考, ...

  6. Poj 2499 Binary Tree(贪心)

    题目链接:http://poj.org/problem?id=2499 思路分析:结点向左边移动时结点(a, b)变为( a+b, b),向右边移动时( a, b )变为( a, a + b); 为求 ...

  7. uva--11991 - Easy Problem from Rujia Liu?(sort+二分 map+vector vector)

    11991 - Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for e ...

  8. Ceph之数据分布:CRUSH算法与一致性Hash

    转自于:http://www.cnblogs.com/shanno/p/3958298.html?utm_source=tuicool 数据分布是分布式存储系统的一个重要部分,数据分布算法至少要考虑以 ...

  9. Win7 x64安装Paramiko出问题

    今天上午windows下配置paramiko环境时出现问题,随手记录下来.   先说一下我的环境: win7 x64 旗舰版.Python3.5.0.pip8.1.0 pip install para ...

  10. 设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型)

     设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就 ...