一、 Spring+Hibernate整合:
Spring整合Hibernate,是做了一个很大的调整的,因为spring可以把管理Hibernate的工作都做了,以前的hibernate.cfg.xml文件都去掉了,而将这些内容都交给了spring来管理了。
1、 applicationContext.xml文件中应该配置如下内容:
- //配置数据连接类
- <bean id="dataSource"
- class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName"
- value="org.gjt.mm.mysql.Driver">
- </property>
- <property name="url" value="jdbc:mysql://localhost:3306/test"></property>
- <property name="username" value="root"></property>
- </bean>
- //配置session工厂类
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref bean="dataSource" />
- </property>
- <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">
- <value>com/hejianjiao/vo/Person.hbm.xml</value>
- </property>
- </bean>
//配置数据连接类
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="org.gjt.mm.mysql.Driver">
</property>
<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
<property name="username" value="root"></property>
</bean>
//配置session工厂类
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<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">
<value>com/hejianjiao/vo/Person.hbm.xml</value>
</property>
</bean>
2、可以使用spring中的HibernateDAOSupport与HibernateTemplate类来进行数据持久化操作:
A、HibernateDAOSupport类中定义了对session、sessionFactory的操作方法与getHibernateTemplate方法来获得一个HibernateTemplate实例;
B、HibernateTemplate类中定义了对数据持久化的各种封装的方法,我们可以用它来对数据进行操作。
因此在使用时,我们可以继承HibernateDAOSupport类,然后实例化HibernateTemplate类来进行数据持久化。
二、 Spring+Struts2整合:
1、spring配置在web.xml文件中的上下文监听器:
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/applicationContext*.xml</param-value>
- </context-param>
-
- <listener>
- <listener-class>org.springframwork.web.content.ContextLoaderListener</listener-class>
- </listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframwork.web.content.ContextLoaderListener</listener-class>
</listener>
2、struts2配置在web.xml文件中的过滤器:
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
- </filter>
-
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-patter>/*</url-patter>
- </filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-patter>/*</url-patter>
</filter-mapping>
3、设置struts.xml文件,就可以使用spring的IOC来管理struts的Action:
- <constent name="struts.objectFactory" value="spring" />
<constent name="struts.objectFactory" value="spring" />
4、第三步设置后,以后在struts.xml 文件中配置一个action时,它的class就不是一个类了,而是在applicationContext.xml文件中定义过的类的ID,在struts.xml文件中就只需要引用定义好的类的id 就可以了。
然后特别要注意的一个问题:action是一个请求就是一个action对象,而在spring中则不是的,它是自动分配类的实例的,是使用的单态模式来生产类的实例的,不符合action,因此在applicationContext.xml文件中定义每个action时,都要在类后加上:
scope="prototype" 属性
三、 三者组合开发:
一般在组合开发时,没有什么难的,只要把上面两步做好就可以是三个组合开发了。
[img]
[/img]
[img][/img]
上图则是对于进行组合开发时,一般使用的系统架构:
1、 先从最底层开发,先开发POJO类,和Hibernate映射文件。它相当于系统的数据库层。
2、 再开发DAO层,它是对于数据进行持久化的一层,专门处理各种数据增、删、改、查的功能。并且使用DAO工厂模式,以保证和上层没有任何的联系,并且可以方便于类与接口的扩展。
3、 第三是开发manager层,它相当于软件的业务逻辑层,即专门处理各种业务逻辑。实现系统的业务处理功能。并且它隔离事务,使与下层的数据持久和上层的数据操作没有任何的联系。
4、 Action层,也即软件的表示层,处理action的接收与回复。各action由spring管理。
五、 组合开发中的一些问题:
1、 在组合开发中,常见的一个问题就是session的管理,当我们使用HibernateTemplate操作数据库时,可以不对session进行显示的操作,spring可以自动处理session的打开与关闭。
我们可以在web.xml文件中显示的配置一个session管理的过滤器,它专门帮助我们关闭session:
- <filter>
- <filter-name>lazyLoadingFilter</filter-name>
- <filter-class>
- org.springframwork.orm.hibernate3.support.OpenSessionInViewFilter
- </filter-class>
- </filter>
-
- <filter-mapping>
- <filter-name>lazyLoadingFilter</filter-name>
- <url-pattern>*.action</url-pattern>
- </filter-mapping>
- 注:它一定要在struts2的过滤器之前。因为web.xml文件的过滤器执行是有顺序的。而session一定在前面进行。
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframwork.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
注:它一定要在struts2的过滤器之前。因为web.xml文件的过滤器执行是有顺序的。而session一定在前面进行。
它会在所有的action处理完了,页面显示完了,就会自动关闭session。
六、 spring事务处理
1、事务的处理也交给了spring来管理,要在applicationContext.xml文件中上配置事务管理类:
- //实施事务管理的bean
- <bean id=”transactionManager”
- class=”org.springframwork.orm.hibernate3.HibernateTransactionManager”>
- <property name=”sessionFactory”>
- <ref bean=”sessionFactory” />
- </property>
- </bean>
//实施事务管理的bean
<bean id=”transactionManager”
class=”org.springframwork.orm.hibernate3.HibernateTransactionManager”>
<property name=”sessionFactory”>
<ref bean=”sessionFactory” />
</property>
</bean>
它是通过sessionFactory来管理,因此在传进来一个sessionFactory来接管事务处理。
2、 声明式事务处理:
在spring中对事务进行管理时,可以显示地进行事务处理的定义:
- //给事务添加的属性
- <tx:advice id=”txAdvice” transaction-manager=”transactionManager”>
- <tx:attributes >
- //propagation表示的是事务的传播特性,使用required时,是当检测到add开头的方法时,就看此时有没有开启的事务,如果有则将方法放进事务中去,如果没有,则新建一个事务。然后将方法放进去。
- <tx:method name=”add*” propagation=”REQUIRED”>
- <tx:method name=”delete*” propagation=”REQUIRED”>
- <tx:method name=”update*” propagation=”REQUIRED”>
- //如果检测到其它的方法,则给其只读数据库的属性。即当本方法在读时,其它的方法不能再去写了。保证一个事务的完整性。
- <tx:method name=”*” read-only=”true”>
- </tx:attributes>
- </tx:advice>
//给事务添加的属性
<tx:advice id=”txAdvice” transaction-manager=”transactionManager”>
<tx:attributes >
//propagation表示的是事务的传播特性,使用required时,是当检测到add开头的方法时,就看此时有没有开启的事务,如果有则将方法放进事务中去,如果没有,则新建一个事务。然后将方法放进去。
<tx:method name=”add*” propagation=”REQUIRED”>
<tx:method name=”delete*” propagation=”REQUIRED”>
<tx:method name=”update*” propagation=”REQUIRED”>
//如果检测到其它的方法,则给其只读数据库的属性。即当本方法在读时,其它的方法不能再去写了。保证一个事务的完整性。
<tx:method name=”*” read-only=”true”>
</tx:attributes>
</tx:advice>
对于事务的其它传播属性,则可以参考其它文档进行相关的了解。
上一个配置是针对于所有包中类的事务处理方法的设置。下面一段是<aop:config/> 的定义,它确保由 'txAdvice' bean定义的事务通知在应用中合适的点被执行。首先我们定义了 一个切面,它匹配 HibernateDAO 接口定义的所有操作,我们把该切面叫做 'allManagerMethod'。然后我们用一个通知器(advisor)把这个切面与 'txAdvice' 绑定在一起,表示当 'allManagerMethod' 执行时,'txAdvice' 定义的通知事务逻辑将被执行。这就是AOP切面工程:
- <aop:config>
- <aop:pointcut id=”allManagerMethod”
- expression=”execution(* com.hejianjiao.hibernate.HibernateDAO.*(..))”/>
- //调用上面配置的事务属性,可以将它给本aop pointcut。
- <aop:advisor advice-ref=”txAdvice” pointcut-ref=”allManagerMethod”/>
- //如果还有其它的定义,则可以再加上pointcut、advisor来定义本切面点的事务逻辑。
- </aop:config>
<aop:config>
<aop:pointcut id=”allManagerMethod”
expression=”execution(* com.hejianjiao.hibernate.HibernateDAO.*(..))”/>
//调用上面配置的事务属性,可以将它给本aop pointcut。
<aop:advisor advice-ref=”txAdvice” pointcut-ref=”allManagerMethod”/>
//如果还有其它的定义,则可以再加上pointcut、advisor来定义本切面点的事务逻辑。
</aop:config>
//expression中的内容是要执行本切面的一个接口,中的所有方法:如:一个接口中定义了操作数据的方法:com.hejianjiao.hibernate.HibernateDAO,则下面execution括号中的内容就为:* com.hejianjiao.hibernate.HibernateDAO.*(..)。而如果在com.hejianjiao.hibernate包中还有其它的类也有操作方法,我们要一起定义的话,就可以写为:* com.hejianjiao.*.*(..),其中(..)表示的是方法,前面的第一个*是操作的接口或者类。
上面的配置将为由 'HibernateDAO' 定义的bean创建一个代理对象,这个代理对象被装配了事务通知,所以当它的相应方法被调用时,一个事务将被启动、挂起、被标记为只读,或者其它(根据该方法所配置的事务语义)。
相关推荐
一个简单的spring+struts2+hibernate+mybatis整合(数据库脚本放在项目资源文件的sql目录下) 因为没想好mvc用springmvc好,还是struts2好 所以没有整合进去
Java Web整合开发实战--基于Struts 2+Hibernate+Spring.pdf 1章 Web的工作机制 2章 搭建Java Web开发环境 3章 JSP及其相关技术 2篇 表现层框架Struts技术 4章 Struts快速上手 5章 解密Struts之核心文件 6章 ...
在IT行业中,SSH(Spring、Struts2、Hibernate)是一个经典的Java Web开发框架组合,而Redis则是一个高性能的键值存储系统,常用于缓存和数据持久化。将SSH与Redis整合,可以提升应用程序的性能和响应速度。下面将...
整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6。 此外,还有:log4j、slf4j、junit4、ehcache等知识点。 项目...
Struts 2+Hibernate+Spring整合开发技术详解sample.pdf
Struts2+Hibernate+Spring整合开发技术详解19章网上书店完整源码(内附数据库导出文件) 与书上最后一章内容完全对应 可以结合书上教程进行最后一章学习
总之,Struts 2、Hibernate 和 Spring 的整合为构建论坛系统提供了一个强大而灵活的基础,让开发者可以专注于业务逻辑的实现,而无需过于关心底层细节。通过熟练掌握这三个框架的使用,开发者可以构建出高效、稳定且...
Java Web技术整合应用与项目实战 JSP+Servlet+Struts2+Hibernate+Spring3_13336769.zip.003 Java Web技术整合应用与项目实战 JSP+Servlet+Struts2+Hibernate+Spring3_13336769.zip.003
【SSH 注解开发】是Java Web开发中一种常见的技术栈组合,由Struts2、Hibernate和Spring框架共同构建。这个学生信息管理系统就是基于这种技术栈,利用注解的方式来简化配置,提高开发效率。 Struts2作为MVC(模型-...
Struts2、Spring、Hibernate和MySql这四个技术是Java Web开发中常用的一套经典组合,被称为SSH框架。这个注册登录系统就是利用这些技术构建的。下面将详细讲解这套组合的相关知识点。 首先,Struts2是一个强大的MVC...
在"10.6struts2+hibernate+spring的整合源代码"中,可能会看到Hibernate的实体类(Entity)、映射文件(.hbm.xml)以及SessionFactory的配置。这些文件用于定义模型对象与数据库表之间的关系,并提供CRUD(创建、...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的整合应用广泛用于构建复杂的Web应用程序,如本例中的图书馆管理系统。这个系统实现了用户登录和注册功能,并且提供了对书籍表的操作,包括增、删、改...
3. 配置Struts2:设置Struts2的配置文件,定义Action类,这些Action类通常是Spring管理的Bean,这样可以利用Spring的依赖注入功能。 4. 配置Struts2-Spring插件:这个插件允许Struts2的动作类直接在Spring容器中...
开发人员可以通过分析这些文件,了解如何配置Struts2、Spring4和Hibernate4的整合,学习如何在实际项目中应用这三大框架。此外,还可以通过阅读源码,理解它们之间的交互机制,加深对MVC模式和Java Web开发的理解。 ...
在这个项目中,Spring作为服务层的容器,管理Bean的生命周期,通过依赖注入将Struts2和Hibernate整合在一起,同时也提供了事务管理,确保数据的一致性。 项目中的sql脚本用于创建数据库表,通常包括表的结构定义和...
这个项目整合了三个关键的开源框架:Struts2、Hibernate和Spring,它们在Java Web开发中扮演着重要角色。 【Struts2】作为MVC(模型-视图-控制器)架构的框架,负责处理HTTP请求,控制应用程序流程,并将数据传递给...
轻量级JavaEE企业应用实战_Struts2+Spring3+Hibernate整合开发_第3版.part2
总的来说,Struts2+Hibernate+Spring整合涉及多个jar包的配合使用,每个jar包都在整个应用程序架构中扮演着重要的角色。理解并正确配置这些jar包,能够帮助开发者构建出高效、可维护的Java Web应用。
Struts2、Hibernate和Spring是Java开发中三大主流框架,它们的整合应用在企业级Web应用开发中极为常见。这个管理系统就是基于这三个框架的集成,提供了高效、灵活且可维护的解决方案。 Struts2作为MVC(Model-View-...
这个"Struts2+Hibernate+Spring3整合jar包"包含了一系列必要的库文件,使得开发者能够快速地搭建一个集成了这三大框架的项目。以下是对这些框架及其整合的关键知识点的详细解释: 1. **Struts2**: - **Action和...