- 浏览: 157486 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (210)
- java (44)
- javascript (5)
- 网摘 (21)
- 程序人生 (19)
- hibernate (21)
- spring (7)
- struts (1)
- jquery (2)
- mssql (3)
- mysql (3)
- oracle (7)
- 学习日记 (10)
- PowerDesigner (1)
- android (4)
- 调试 (1)
- tomcat (3)
- webapp (1)
- context (2)
- jsp (2)
- 学习 (18)
- 态度 (4)
- 坚持 (4)
- jsf (1)
- ui (1)
- css (1)
- seam (0)
- 转载 (5)
- JNDI (1)
- 创业 (1)
- 公司 (1)
- 方向 (1)
- ETL (1)
- Datastage (1)
- 数据整合 (1)
- 心情,感触 (1)
- 开发 (2)
- 测试 (1)
- 需求 (1)
- 湿身 (1)
- 网购,分类 (1)
- 驾校,转载 (1)
- 中秋,露营 (1)
- 域名 (1)
- 空间 (1)
- 网站程序 (1)
- SolrCloud (1)
- Solr (6)
- 全文库 (1)
- HBase (1)
- Hadoop (1)
- 网络应用 (1)
- 数据结构 (1)
- NoSQL (1)
- jQueryEasyUI (1)
- 面试 (1)
- 三十六计 (1)
- S2S3H4 (1)
- jar (1)
- war (1)
- web 项目 (1)
- Subversion (1)
- TortoiseSVN (1)
- MyEclipse (1)
- eclipse svn插件 (1)
- SQL2005 (1)
- ASP (1)
- 笔记 (2)
- 虚拟器、centOS、jdk、tomcat、nginx (1)
- memcached (1)
- nginx (1)
- telnet (1)
- nfs (1)
- zookeeper (2)
- window (1)
- linux (3)
- cronolog (1)
- web (1)
- mybatis (3)
- 设计模式 (1)
- 测试覆盖率 (1)
- EclEmma (1)
- tomcat7 (1)
- sore (1)
- 时间 (1)
- fackbook (0)
- facebook (1)
- IK (2)
- PKUSUMSU (1)
- openoffice (1)
- pdf (1)
- memcache (1)
- 动态词库 (1)
- 动态同义词 (1)
- centos7.3 (2)
- maven (4)
- 111 (0)
- nexus (2)
- 23种设计模式 (1)
- springboot (1)
- shiro (1)
- redis (1)
- rabbitMQ (1)
- native (1)
- dll (1)
- jasperReports (1)
- ireport (1)
最新评论
-
zhongfenglin:
学车的经历 -
Tiny_小小:
...
网购的选择 -
jrjr200411:
楼主写的好!
面对大公司和小公司的选择 -
feelboy:
说的很好。
每周四十小时,你有多少是在为自己干活?
1.管理SessionFactory
使用Spring整合Hibernate时我们不需要hibernate.cfg.xml文件。首先,在applicationContext.xml中 配置数据源(dataSource)bean和session工厂(sessionFactory)bean。其中,在配置session工厂bean 时,应该注入三个方面的信息:
●数据源bean
●所有持久化类的配置文件
●Hibernate的SessionFactory的属性
Hibernate的SessionFactory的属性信息又包括两个内容,一,Hibernate的连接方法;二,不同数据库连接,启动时的选择。
2.为HibernateTemplate注入SessionFactory对象,通过HibernateTemplate来持久化对象
Spring提供了HibernateTemplate,用于持久层访问,该模板无需打开Session及关闭Session。它只要获得 SessionFactory的引用,将可以只能地打开Session,并在持久化访问结束后关闭Session,程序开发只需完成持久层逻辑,通用的操 作(如对数据库中数据的增,删,改,查)则有HibernateTemplate完成。
HibernateTemplate有三个构造函数,不论是用哪一种构造,要使HibernateTemplate能完成持久化操作,都必须向其传入一个SessionFactory的引用。
HibernateTemplate的用法有两种,一种是常规的用法,另一种是复杂的用。
一,常规的用法
HibernateTemplate通过它自己的delete(Object entity) ,find(String queryString),save(Object entity)等等常用的方法即可完成大多数DAO对象的增,删,改,查等操作。
二,复杂的用法
HibernateTemplate的复杂的用法是通过如下的两个方法来完成的:
●Object execute(HibernateCallback action)
●List execute(HibernateCallback action)
这两个方法都需要一个HibernateCallback实例,程序开发者通过HibernateCallback,可以完全使用Hibernate灵活 的方式来访问数据库,解决了Spring封装Hibernate后灵活不足的缺陷。HibernateCallback是一个接口,该接口只有一个方法 doInHibernate(org.hibernate.Session session),该方法只有一个参数Session。
通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,方法doInHibernate就是Spring执行的持久化操作。具体的代码实例如下:
public class PersonDaoImpl {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public List findPersonByName(final String name) {
HibernateTemplate hibernateTemplate =
new HibernateTemplate(this.sessionFactory);
return (List)hibernateTemplate.execute(
public Object doInHibernate(Session session) throws Hibernate Exception {
List result =session.createCriteria(Person.clsss)
.add(Restrictions.like("name",name+"%")).list();
return result;
}
);
}
}
注:在方法doInHibernate内可以访问Session,该Session对象是绑定到该线程的Session实例,该方法内的持久层操作与不使 用Spring时的持久层操作完全相同,这保证了对于复杂的持久层访问时,依然可以使用Hibernate的访问方式。
3.DAO的实现
DAO的实现有两种方式:一,继承HibernateDaoSupport实现DAO;二,基于Hibernate3.0实现DAO。
一,继承HibernateDaoSupport实现DAO
Spring为Hibernate的DAO提供了工具类HibernateDaoSupport。该类主要提供了如下两个方法来方便DAO的实现:
●public final HibernateTemplate getHibernateTemplate()
●public final void setSessionFactory(SessionFactory sessionFactory)
其中,setSessionFactory方法用来接收Spring的ApplicationContext依赖注入的SessionFactory实 例;getHibernateTemplate方法则用来根据刚才的SessionFactory产生Session,最后由 HibernateTemplate来完成数据库访问。
二,基于Hibernate3.0实现DAO
在Hibernate处于事务的管理下时(通常Spring为Hibernate提供事务管理),通过SessionFactory的 getCurrentSession()方法可以返回当前的Session,如果当前的JTA事务关联的Session不存在,则系统打开一次新的 Session,并关联到当前的JTA事务;如果当前JTA事务关联的Session已经存在,则直接返回该Session。获得了当前的Session 后就可以进行持久化操作了。
可见,不论使用上面的哪一种方式实现DAO都需要用Spring来注入SessionFactory实例。
4.事务的管理
Hibernate建议所有的对数据库的访问都应放在事务内进行,即使进行的只是读操作。Spring同时支持编程式事务和声明式事务。通常推荐使用声明式事务。
编程式事务管理:
编程式事务提供了TransactionTemplate模板类,用的时候必须向其体提供一个PlatformTransactionManager实 例。只要TransactionTemplate获取了PlatformTransactionManager的引用, TransactionTemplate就可以完成事务操作了。TransactionTemplate提供了一个execute方法,它接收一个 TransactionCallback实例。TransactionCallback包含如下方法:
●Object doInTransaction(TransactionStatus status)
这是需要有返回值的情况。如果不需要有返回值的话,我们可以用TransactionCallbackWithOutResult类来代替TransactionCallback类,它也有一个方法:
●void doInTransaction(TransactionStatus status)
在这个两个方法中,在出现异常时,TransactionStatus的实例status可以调用setRollbackOnly()方法进行回滚。
一般情况下,向execute方法传入TransactionCallback或TransactionCallbackWithOutResult实例时,采用的是匿名内部类的形式。
声明式事务管理:
声明式事务管理的配置方式通常有三种:
●使用TransactionProxyFactoryBean为目标bean生成事务代理的配置。
●使用BeanNameAutoProxyCreator,根据bean name自动生成事务代理的方式,这是直接利用Spring的AOP框架配置事务代理的方式,需要对Spring的AOP框架有所了解。
●使用DefaultAdvisorAutoProxyCreator,这也是直接利用Spring的AOP框架配置事务代理的方式,只是这种配置方式的可读性不如使用BeanNameAutoProxyCreator的配置方式。
------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<!-- 数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>COM.ibm.db2.jdbc.net.DB2Driver</value>
</property>
<property name="url">
<value>jdbc:db2://localhost:6789/GUOZIWEI</value>
</property>
<property name="username">
<value>db2admin</value>
</property>
<property name="password">
<value>db2admin</value>
</property>
</bean>
<!--数据库会话工厂 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>com/becom/ins/dto/User.hbm.xml</value>
<value>com/becom/ins/dto/InsFunds.hbm.xml</value>
<value>com/becom/ins/dto/Company.hbm.xml</value>
<value>com/becom/ins/dto/Group.hbm.xml</value>
<value>com/becom/ins/dto/OtherFunds.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
</props>
</property>
</bean>
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<!-- Spring 事务管理器代理 -->
<bean id="transactionProxyFactory" abstract="true" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref local="transactionManager"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="search*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="remove*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="count*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!-- Hibernate模板 -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 用户服务对象 -->
<bean id="userService" parent="transactionProxyFactory">
<property name="target">
<bean class="com.becom.ins.user.service.UserService">
<property name="userDAO">
<ref local="userDAO"/>
</property>
</bean>
</property>
</bean>
<!-- 用户数据访问对象 -->
<bean id="userDAO" class="com.becom.ins.user.dao.UserDAO">
<property name="hibernateTemplate" ref="hibernateTemplate"/>
</bean>
<!-- 破产服务对象 -->
<bean id="insService" parent="transactionProxyFactory">
<property name="target">
<bean class="com.becom.ins.insolvency.service.InsFundsService">
<property name="insDAO">
<ref local="insDAO"/>
</property>
</bean>
</property>
</bean>
<!-- 用户数据访问对象 -->
<bean id="insDAO" class="com.becom.ins.insolvency.dao.InsFundsDAO">
<property name="hibernateTemplate" ref="hibernateTemplate"/>
</bean>
<!-- 集团服务对象 -->
<bean id="groupService" parent="transactionProxyFactory">
<property name="target">
<bean class="com.becom.ins.group.service.GroupServiceImpl">
<property name="groupDAO">
<ref local="groupDAO"/>
</property>
</bean>
</property>
</bean>
<!-- 用户数据访问对象 -->
<bean id="groupDAO" class="com.becom.ins.group.dao.GroupDAOImpl">
<property name="hibernateTemplate" ref="hibernateTemplate"/>
</bean>
<!-- 公司服务对象 -->
<bean id="companyService" parent="transactionProxyFactory">
<property name="target">
<bean class="com.becom.ins.company.service.CompanyServiceImpl">
<property name="companyDAO">
<ref local="companyDAO"/>
</property>
</bean>
</property>
</bean>
<!-- 公司数据访问对象 -->
<bean id="companyDAO" class="com.becom.ins.company.dao.CompanyDAOImpl">
<property name="hibernateTemplate" ref="hibernateTemplate"/>
</bean>
</beans>
发表评论
-
Spring集成redis(SSM框架)
2018-12-29 17:25 451参考:https://blog.csdn.net/weixi ... -
springmvc常用注解标签详解
2018-03-13 20:26 3581、@Controller 在SpringMVC 中,控制 ... -
2017-08-15 SpringMVC框架项目国际化学习的笔记
2017-08-15 11:37 416springMVC的国际化开发方案 1.项目分支,在分支 ... -
SpringMVC3+MyBatis3整合的笔记
2017-03-22 14:55 332在公司基础框架的基础之上增加多数据源的支持,公司框架底层是 ... -
SSH整合的几种最常见方式 .
2012-03-22 12:00 1230Spring实例Action的两种方式:1、Delegatin ... -
Spring Security 2 配置精讲
2010-08-31 10:35 790Spring Security基本配置 Spring Secu ...
相关推荐
在"25_黑马程序员_黎活明_Spring2.5视频教程_搭建和配置Spring与Hibernate整合的环境.avi"这个文件中,可能详细演示了如何配置这些库到项目的类路径中。 接着,需要配置Spring的IoC容器。这可以通过XML配置文件完成...
这个“Spring+hibernate整合源代码”应该包含了实现上述整合步骤的示例代码,可以作为学习和参考的资源。通过学习和实践这些代码,你可以更好地理解和掌握 Spring 和 Hibernate 整合的细节,提升你的 Java Web 开发...
在这个“Spring与Hibernate整合实例(博客用户登录增删改查)”中,我们将探讨如何将这两个强大的框架——Spring和Hibernate——结合起来,以实现一个博客系统的用户管理功能,包括用户登录、注册、信息修改以及数据...
《Spring与Hibernate整合详解》 在现代Java Web开发中,Spring和Hibernate是两个非常重要的开源框架,它们分别在依赖注入和对象关系映射(ORM)领域有着广泛的应用。Spring作为一个全面的轻量级应用框架,提供了...
总结来说,Spring 与 Hibernate 的整合主要涉及 SessionFactory 的配置、DAO 类的实现以及事务管理。通过 Spring 的 IoC 容器管理数据访问资源,可以使应用更加解耦,同时利用 Spring 的事务管理功能,可以简化事务...
这个简单的示例展示了Spring和Hibernate整合的基本流程,实际项目中可能还需要考虑更多的细节,如异常处理、事务策略等。 总结来说,Spring与Hibernate的整合使得Java开发人员能够更方便地管理数据库操作,并利用...
这个"springmvc spring hibernate整合Demo"旨在帮助初学者理解如何将这三个框架协同工作,实现一个完整的CRUD(创建、读取、更新、删除)应用。 Spring MVC 是 Spring 框架的一部分,专门用于构建Web应用程序。它...
"Spring与Hibernate整合"是为了实现业务逻辑层和数据访问层的高效协作。整合过程通常包括以下几个步骤: 1. **引入依赖**:首先,需要在项目中添加Spring和Hibernate的相关库。这通常通过Maven或Gradle的依赖管理来...
当我们谈论"spring_hibernate整合实例"时,意味着我们将这两个框架结合在一起,以实现更高效、更模块化的后端开发。 首先,Spring和Hibernate的整合主要涉及以下几个核心概念: 1. **依赖注入(DI)**:Spring的...
### Struts2、Spring与Hibernate整合应用:学生成绩管理系统 #### 一、知识点概览 本项目聚焦于Struts2、Spring与Hibernate三大框架的整合应用,旨在构建一个高效、稳定、易于维护的学生成绩管理系统。通过整合这...
《Struts2、Spring与Hibernate整合应用:学生成绩管理系统》 在IT行业中,构建一个高效、稳定的Web应用程序常常需要整合不同的框架。本项目“学生成绩管理系统”就是基于Struts2、Spring和Hibernate三大主流Java ...
此外,Spring还提供了与Hibernate的整合模块,使得ORM操作更加便捷。 3. **Hibernate**:Hibernate是一个优秀的对象关系映射(ORM)框架,它允许开发者使用Java对象来操作数据库,而无需直接编写SQL语句。Hibernate...
在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第11部分,重点可能是建立在前几部分的基础之上,进一步深化对这三个核心技术的理解和实践。 ...
在"标签"中,"spring 整合 hibernate helloworld"进一步强调了这是关于Spring与Hibernate整合的基础教学,可能包含了一个简单的入门级示例。"helloworld"通常表示最基础的程序,用于展示框架的基本用法。 在"压缩...
通过阅读和理解提供的"Spring,Hibernate整合源码",可以深入学习如何在实际项目中将这两个框架融合,掌握最佳实践,提高开发效率。源码分析通常涉及对配置文件的理解,如Spring的beans.xml和Hibernate的hibernate....
通过以上步骤,一个基本的Struts、Spring和Hibernate整合的应用就搭建完成了。这个整合的关键在于Struts处理HTTP请求,Spring管理业务对象和依赖,而Hibernate则处理数据库操作。这样的架构可以实现松耦合,便于代码...
在sshdemo这个文件夹中,可能包含的文件有struts-config.xml、spring-beans.xml、hibernate.cfg.xml、数据库脚本、Action类、DAO接口及其实现、服务类、以及相关的JSP页面等,这些都是SSH整合用户注册功能的关键组成...
总之,Spring 和 Hibernate 的整合是 Java Web 开发中的常见实践,它利用 Spring 的强大管理能力和事务处理,结合 Hibernate 的 ORM 功能,简化了数据库操作和事务管理,提高了软件的可扩展性和可维护性。...
"spring+hibernate整合jar包"是一个包含所有必需组件的压缩包,用于帮助开发者快速搭建一个基于Spring、Hibernate和Spring MVC的项目。这个压缩包中的"lib"目录,通常会包含以下关键的jar文件: 1. **Spring框架**...
### JSF+Spring+Hibernate整合图文教程详解 #### 一、多层体系结构与JSF+Spring+Hibernate的整合 **多层体系结构**是一种高级的Web应用程序架构方式,其核心在于通过不同的层次来实现软件系统的各个部分,从而提高...