为什么要整合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. GIT简易使用流程

    git是目前世界上最先进的分布式版本控制系统(摘自廖雪峰官网) 首先需要在系统上安装git: Windows系统在这下载: RHEL/Centos/Fedora用户可以用以下命令安装:yum -y i ...

  2. referer htttp headers 统计信息 防盗链

    HTTP headers是HTTP请求和相应的核心模块,它承载了关于客户端浏览器.请求页面.服务器等相关信息.Referer是HTTP头中的一个属性,告诉服务器我是从哪个页面链接过来的,所携带的信息用 ...

  3. Google瓦片地图算法解析

    基本概念: 地图瓦片地址:http://mt2.google.cn/vt/lyrs=m@167000000&hl=zh-CN&gl=cn&x=420&y=193& ...

  4. 关于jdbc的一些疑问

    1.为什么强调在使用jdbc时,须要在使用的时候才打开连接(Connection),用完后立刻关闭.假设我的连接(Connection)一開始就打开.在整个程序结束时才关闭,会带来什么后果呢? 2.为 ...

  5. EBS 数据库预克隆日志

    ora02@[/u07/CCTEST02/db/tech_st/11.1.0/appsutil/scripts/CCTEST02_test01] $ T02_test01/StageDBTier_06 ...

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

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

  7. Ubuntu设置为命令行登录

    root@ubuntu:~# vi /etc/default/grub 改: #GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMD ...

  8. 由zImage生成uImage

    一.手动使用mkimage命令 mkimage -A arm -O linux -T kernel -C none -a 30007fc0 -e 30007fc0 -n uImage   -d /wo ...

  9. gpexpand error:Do not have enough valid segments to start the array.

    gpstart error: Do not have enough valid segments to start the array. 这个时候需要检查一下shared_buffers设置改小点,就 ...

  10. 独立搭建zookeeper

    1.如果你装了带有zookeeper的Hbase版本,先把hbase-env.sh   export HBASE_MANAGES_ZK=false 设置为false 见下图 2.下载安装zookeep ...