Spring学习笔记六:Spring整合Hibernate
转载请注明原文地址: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的更多相关文章
- Java架构师之路 Spring学习笔记(一) Spring介绍
前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...
- spring学习笔记(一) Spring概述
博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书. 强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...
- Spring 学习笔记(2) Spring Bean
一.IoC 容器 IoC 容器是 Spring 的核心,Spring 通过 IoC 容器来管理对象的实例化和初始化(这些对象就是 Spring Bean),以及对象从创建到销毁的整个生命周期.也就是管 ...
- Spring学习笔记:spring整合web之spring-web架包的引用(WebApplicationContextUtils注入容器)
WebApplicationContextUtils 一.Spring整合web之前 案例:给部门列表添加新部门 import org.apache.log4j.Logger; import org. ...
- Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(二:mybatis整合spring)
http://blog.csdn.net/qq598535550/article/details/51703190 二.Spring整合mybatis其实是在mybatis的基础上实现Spring框架 ...
- Spring学习(六)整合web开发
https://www.cnblogs.com/Leo_wl/p/4459274.html 1.加载Spring核心配置文件 //1.加载Spring配置文件,根据创建对对象 ApplicationC ...
- Spring学习笔记:spring与mybatis四种整合方法
1.采用数据映射器(MapperFactoryBean)的方式,不用写mybatis映射文件,采用注解方式提供相应的sql语句和输入参数. (1)Spring配置文件: <!-- 引入jdbc ...
- Spring学习笔记:Spring整合Mybatis(mybatis-spring.jar)(一:知识点回顾)
一.知识点回顾 1.Mybatis环境搭建(DAO层的实现)(使用maven项目管理工具) 需要引入的依赖包: <!-- 单元测试junit --> <dependency> ...
- Spring学习笔记:Spring整合Mybatis学习PPT(三:整合思路)
三.Spring-Mybatis的整合思路
随机推荐
- 疑犯追踪第五季/全集Person of Interest迅雷下载
英文全名Person of Interest,第5季(2015)CBS.本季看点:<疑犯追踪>本季剧组暗示Finch可能重建机器,这次他会给机器更多自由(如Root一直要求的那样).或许新 ...
- 第一章 AOP
关于AOP,通常我们会使用AspectJ注解来做,共有6中切面 前置:@Before 后置:@After 返回值:@AfterReturing 异常:@AfterThrowing 环绕:@Around ...
- [转]mysql 一个表两列的值交换
FROM : http://bbs.csdn.net/topics/380025779 mysql> select * from test1 +------+-------+-------+ | ...
- 使用samba进行共享文件操作步骤
使用samba进行共享文件操作步骤 1.验证方式 设置用户访问samba server的验证方式,一共有四种验证方式. a. share:用户访问samba server不需要提供用户名和密码,安全性 ...
- 【BZOJ】【3339】Rmq Problem
离线+线段树 Orz Hzwer,引用题解: 这一题在线似乎比较麻烦 至于离线.. 首先按照左端点将询问排序 然后一般可以这样考虑 首先如何得到1-i的sg值呢 这个可以一开始扫一遍完成 接着考虑l- ...
- iOS:CoreText的常用语法
CoreText的关键语法 一.坐标旋转 -(void)drawRect:(CGRect)rect { //获取上下文 CGContextRef ctx = UIGraphicsGetCurrentC ...
- 怎么选择软件许可证,Apache, MIT, BSD, GPL, Mozilla, LGPL
- 如何移除EFI system partition?
莫名其妙, 在我的服务器上出现了这样一种分区, 上面写着EFI system, 删也删不掉, 因为删除分区的菜单是灰掉的. 找到了这篇文章, 成功的删掉了这个烦人的分区. 整个过程记录如下: 参考 ...
- JAVA-SpringMVC基于注解模式第一个应用
项目文件结构 1. web.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <web-app x ...
- intel 汇编中断解释
汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序.使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用. 显示服务 (Video Service: ...