转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6785323.html 

前言:整合概述

Spring整合Hibernate主要是把Hibernate中常用的SessionFactory、session对象等的创建托管给Spring容器,并且利用SpringAOP进行事务管理。

由“常用对象托管、事务管理”的需求,我们就不难得到整合时需要做的工作了:

1:托管Hibernate常用的对象如:SessionFactory

2:托管数据源

3:事务管理配置

4:托管持久层对象,并注入sessionFactory

5:持久层对象使用sessionFactory进行持久化操作,也可以使用Spring提供的持久层操作模版进行持久化操作

下面,是具体整合开发的步骤。

一:定义实体类Bean,并得到每个实体类的映射文件。

可以由反向工程,由数据库表快速得到实体bean以及映射文件。

二:定义持久层DAO Bean

继承HibernateDaoSupport 定义DAO bean,bean中定义一个私有成员 SessionFactory,然后定义一系列持久化方法。

整合后持久化方法有两种写法:

1:按照传统的Hibernate框架的使用方法,通过sessionFactory.openSession等方法获取session,然后用session进行HQL/QBC查询。

2:使用Spring对Hibernate框架的进一步封装得到的方法,建议使用第一种:模版法

    getHibernateTemplate():返回一个Hibernate操作模版类,提供一系列简单的save/find/update等方法,并且自动管理事务与session生命周期。

不配置事务时:每次操作对应一个新的session,自动提交,自动关闭

配置事务时:统一一个事务绑定一个session,事务由spring管理,自动关闭

getHibernateTemplate().save(member);
getHibernateTemplate().update(member);
getHibernateTemplate().delete(getHibernateTemplate().get("com.leec.demo.db.DTO.MemberDTO", _id)); String queryString = "from MemberDTO where name = ?";
List<MemberDTO> ls = getHibernateTemplate().find(queryString, _name);

   getSession()

不配置事务时:每次操作对应一个新的session,手动提交,手动关闭;

配置事务时:统一一个事务绑定一个session,事务由spring管理,自动关闭;

   getHibernateTemplate().getSessionFactory().getCurrentSession()——

这是hibernate的官方方法,获取当前线程绑定的session

 不配置事务时:不能使用;

配置事务时:统一一个事务绑定一个session,事务由spring管理,自动关闭;

   getHibernateTemplate().getSessionFactory().openSession()(不推荐使用)

这是hibernate的官方方法,创建一个新的session。

事务自己管理,不受spring控制,同hibernate原来的做法,手动提交,手动关闭;

三:配置applicationContext.xml

1:配置数据源:指明数据源种类、驱动、数据库url、用户名、密码等

    <bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">//主要有两种:传统的BasicDataSourse和C3P0的CombolpooledDataSourse
<!--配置数据库连接信息-->
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url" value="jdbc:mysql://localhost:3306/数据库名" />
<property name="username">
<value>账户</value>
</property>
<property name="password">
<value>密码</value>
</property>
</bean>
 <bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="jdbcUrl">
<value>jdbc:mysql://localhost:3306/数据库名</value>
</property>
<property name="user">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>

2:整合Hibernate:配置SessionFactory标签,在子标签中  注入数据源、指明hibernate的相关配置信息、配置映射文件路径

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!--注入数据源-->
<property name="dataSource">
<ref bean="dataSource" />
</property>
<!--配置hibernate配置,主要是之前hibernate.cfg.xml中的信息-->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">//方言
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">//打印语句
true
</prop>
</props>
</property>
<!--配置实体类的映射文件-->
<property name="mappingResources">
<list>//多个映射文件,用list来罗列
<value>XX/XXX/XX.hbm.xml</value>
<value>XX/XX/XXX.hbm.xml</value>
......
</list>
</property>
</bean>

3:注册各种要托管的Bean,进行各种设置如:注入(DAO bean尤其要记得注入sessionFactory

<bean id="Service"
class="...Service">
<property name="XXDAO Bean成员" ref="XXDAO" />//注入DAO对象,在service层调用持久化方法
</bean> <bean id=XXDAO"
class="...xxDAO">
<property name="sessionFactory">//往DAObean注入sessionFactory,以供进行hibernate持久化操作
<ref bean="sessionFactory" />
</property>
</bean>

4:配置事务管理器

<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">//使用Hibernate事务管理器
<property name="sessionFactory">//注入sessionFactory
<ref bean="sessionFactory" />
</property>
</bean>

5:配置事务管理通知tx:advice

  <!-- 事务通知 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<!-- 为哪些方法进行事务管理、怎么管理-->
<tx:attributes>
<!-- 所有get开头的方法的事务定义 -->
<tx:method name="get*" propagation="REQUIRED"/>//以正则表达式的形式匹配需要进行事务管理的方法,并指明如何管理事务
<!-- 其他的方法的事务定义-->
<tx:method name="*" .../>
</tx:attributes>
</tx:advice>

6:配置切面,把事务通知切入Service层的方法

    <aop:config>
<aop:pointcut id="pointcut1" expression="execution(返回值 路径.方法名.(参数列表))"/>//切入点筛选出需要进行事务管理的方法,至于如何管理,则在tx:advice中再匹配
<aop:advisor advice-ref="txAdvice1" pointcut-ref="pointcut1"/>
</aop:config>

<bean id="dataSource"            class="com.mchange.v2.c3p0.ComboPooledDataSource"            destroy-method="close">            <property name="driverClass">                <value>com.mysql.jdbc.Driver</value>            </property>            <property name="jdbcUrl">                <value>jdbc:mysql://localhost:3306/couplespace</value>            </property>            <property name="user">                <value>root</value>            </property>            <property name="password">                <value>root</value>            </property>     </bean>

Spring学习笔记六:Spring整合Hibernate的更多相关文章

  1. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

  2. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  3. Spring 学习笔记(2) Spring Bean

    一.IoC 容器 IoC 容器是 Spring 的核心,Spring 通过 IoC 容器来管理对象的实例化和初始化(这些对象就是 Spring Bean),以及对象从创建到销毁的整个生命周期.也就是管 ...

  4. Spring学习笔记:spring整合web之spring-web架包的引用(WebApplicationContextUtils注入容器)

    WebApplicationContextUtils 一.Spring整合web之前 案例:给部门列表添加新部门 import org.apache.log4j.Logger; import org. ...

  5. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(二:mybatis整合spring)

    http://blog.csdn.net/qq598535550/article/details/51703190 二.Spring整合mybatis其实是在mybatis的基础上实现Spring框架 ...

  6. Spring学习(六)整合web开发

    https://www.cnblogs.com/Leo_wl/p/4459274.html 1.加载Spring核心配置文件 //1.加载Spring配置文件,根据创建对对象 ApplicationC ...

  7. Spring学习笔记:spring与mybatis四种整合方法

    1.采用数据映射器(MapperFactoryBean)的方式,不用写mybatis映射文件,采用注解方式提供相应的sql语句和输入参数.  (1)Spring配置文件: <!-- 引入jdbc ...

  8. Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(一:知识点回顾)

    一.知识点回顾 1.Mybatis环境搭建(DAO层的实现)(使用maven项目管理工具) 需要引入的依赖包: <!-- 单元测试junit --> <dependency> ...

  9. Spring学习笔记:Spring整合Mybatis学习PPT(三:整合思路)

    三.Spring-Mybatis的整合思路

随机推荐

  1. osx升级到10.10后,使用pod install报错解决的方法

    先看下网上的解决方法例如以下: 先依照这个文章做:http://blog.csdn.net/dqjyong/article/details/37958067 大概过程例如以下: Open Xcode ...

  2. Java命令学习系列(六)——jinfo

    jinfo可以输出java进程.core文件或远程debug服务器的配置信息.这些配置信息包括JAVA系统参数及命令行参数,如果进程运行在64位虚拟机上,需要指明-J-d64参数,如:jinfo -J ...

  3. Ubuntu系统重启后/etc/resolv.conf内容丢失的解决方案

    通过resolvconf实现配置 resolvconfig应用可以实现DNS信息管理,可以通过下面的应用来安装此组件: sudo apt-get install resolvconf 创建/etc/d ...

  4. 【转】ubuntu apt-get update 失败解决

    FROM : http://blog.csdn.net/ronghua_liu/article/details/8609450 当运行apt-get update后出现如下错误时:E: Some in ...

  5. 使用samba进行共享文件操作步骤

    使用samba进行共享文件操作步骤 1.验证方式 设置用户访问samba server的验证方式,一共有四种验证方式. a. share:用户访问samba server不需要提供用户名和密码,安全性 ...

  6. C#从证书存储区读取证书

    using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptograph ...

  7. 5.1 javassist基本使用

    假设要使用javassist创建一个类: package com.alibaba.dubbo.demo.test; public class Emp { //属性 private int accoun ...

  8. scrapy框架系列 (2) 一个简单案例

    学习目标 创建一个Scrapy项目 定义提取的结构化数据(Item) 编写爬取网站的 Spider 并提取出结构化数据(Item) 编写 Item Pipelines 来存储提取到的Item(即结构化 ...

  9. css3新增样式介绍

    在PC版开发中由于IE原因,我们很少用到css3,但随着平板和智能手机进入我们的生活,以及现在越来越流行,在手机版和平板版开发中我们就可以大胆的使用了,下面我们探讨常用几个css3属性: 1.css3 ...

  10. python os.path模块常用方法详解 ZZ

    os.path模块主要用于文件的属性获取,在编程中经常用到,以下是该模块的几种常用方法.更多的方法可以去查看官方文档:http://docs.python.org/library/os.path.ht ...