Struts2 Hibernate Spring 整合的基本流程和步骤及其相关配置细节
本文由发表于6年前 | J2EE | 评论数 4 |  被围观 11,939 views+

配置Hibernate环境


1、 把Hibernate的相关jar包复制到lib目录下:

① HIBERNATE_HOME/lib 下的相关的依赖的第三方包
② HIBERNATE_HOME/hibernate3.jar Hibernate的核心实现
③ 引入入相关的JDBC驱动


2、 在src目录下创建相关的配置文件:hibernate.cfg.xml

可以从以下目录中拷贝过来修改:

HIBERNATE_HOME \etc\ hibernate.properties 旧版本的Hibernate实用的核心配置文件,这个文件列举了相关的Hibernate配置,在配置文件时可以参考该文件。
HIBERNATE_HOME \etc\ hibernate.cfg.xml 如果存在这个文件则会覆盖上面的properties文件
HIBERNATE_HOME\hibernate-3.2\etc 日志记录文件


3、 编写hibernate.cfg.xml文件:

<hibernate-configuration>
    <session-factory>
       <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
       <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/数据库名称</property>
       <property name="hibernate.connection.username">用户</property>
       <property name="hibernate.connection.password">密码</property>
       <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
       <property name="hibernate.show_sql">true</property>
       <!--
       <property name="hibernate.format_sql">true</property>
        -->      
       <mapping resource="com/test/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>


4、 编写*.hbm.xml等实体映射文件

<hibernate-mapping>
    <class name="com.test.User">
       <id name="id">
           <generator class="uuid"/>
       </id>
       <property name="name" column=”user_name”/>
       <property name="password"/>
    </class>
</hibernate-mapping>

创建完映射文件之后,记得把hbm.xml文件添加到hibernate.cfg.xml文件中

<mapping resource="com/test/User.hbm.xml"/>
       (在session-factory标签里property标签后)


5、 生成数据库

创建hibernate.cfg.xml中指定的数据库
可以使用SchemaExport生成相关表

Configuration cfg = new Configuration().configure();
SchemaExport export = new SchemaExport(cfg);
export.create(true, true);

也可以在hibernate.cfg.xml中进行相关的配置使之自动生成

<property name="hibernate.hbm2ddl.auto">create</property>
配置Spring环境:


1、 把spring相关的jar包复制到lib目录中

SPRING_HOME\dist\spring.jar spring核心jar包
SPRING_HOME \lib\log4j\log4j-1.2.14.jar 记录日志
SPRING_HOME \lib\jakarta-commons\commons-logging.jar


2、 在WEB-INF下建立applicationContext.xml

可从SPRING_HOME\ samples\jpetstore\war\WEB-INF\目录下拷贝applicationContext.xml


3、 提供log4j.properties配置文件

可从下面目录中拷贝:

G:\software_programming\Java\SSH\spring\spring-framework-2.0.8-with-dependencies\spring-framework-2.0.8\samples\jpetstore\war\WEB-INF\ log4j.properties


4、把初始化Hibernate的SessionFactory接口交给spring管理

<bean id="sessionFactory"
       class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
       <property name="configLocation" value="classpath:hibernate.cfg.xml">
       </property>
</bean>

注意:这里的数据库相关配置信息是写到了hibernate.cfg.xml文件中,也可以通过在spring配置jdbc datasource对数据库进行管理,然后通过datasource注入sessionFactory的方式来创建会话工厂。


5、配置spring为hibernate配置的数据库访问操作的封装类hibernateTemplate

<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
       <property name="sessionFactory" ref="sessionFactory" />
</bean>


6、在applicationContext.xml文件中配置数据库的事务(也可以使用AOP进行配置)

<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
    <bean id="transactionManager"
       class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       <property name="sessionFactory">
           <ref bean="sessionFactory" />
       </property>
    </bean>

    <!-- 设置事务传播特性,对应于AOP中的 <tx:advice />  -->
    <bean id="transactionInterceptor"
       class="org.springframework.transaction.interceptor.TransactionInterceptor">
       <property name="transactionManager">
           <ref bean="transactionManager" />
       </property>
       <property name="transactionAttributes">
           <props>
              <prop key="get*">PROPAGATION_REQUIRED, readOnly
              </prop>
              <prop key="*">PROPAGATION_REQUIRED</prop>
           </props>
       </property>
    </bean>   
     <!-- 定义BeanNameAutoProxyCreator,配置哪些类和哪些方法使用事务对应于AOP中的 <aop:pointcut /> -->   
    <bean
       class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
       <!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
       <property name="beanNames">
           <!-- 下面是所有需要自动创建事务代理的bean-->   
           <list>
               <value>userDAO</value>             
              <value>provinceDAO</value>
              <value>cityDAO</value>
              <value>sexDAO</value>
              <value>statusDAO</value>
           </list>
           <!-- 此处可增加其他需要自动创建事务代理的bean-->
       </property>
       <property name="interceptorNames">
           <!--  下面定义BeanNameAutoProxyCreator所需的事务拦截器-->   
           <list>
              <value>transactionInterceptor</value>
               <!-- 此处可增加其他新的Interceptor -->
           </list>
       </property>
    </bean>


7、在applicationContext.xml中配置相关的数据访问层Dao,注意创建时要给spring提供一个借口,方便其代理

<bean id="userDAO" class="com.pzx.dao.UserDAOImpl">
       <constructor-arg>
           <ref bean="hibernateTemplate" />
       </constructor-arg>
</bean>


8、在applicationContext.xml中配置相关的业务逻辑层Service,其构造函数中的参数指向器数据访问层bean

<bean id="userService" class="net.blogjava.nokiaguy.kxw.service.UserServiceImpl">
       <constructor-arg>
           <ref bean="userDAO" />
       </constructor-arg>
</bean>


9、在web.xml中配置如下信息

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml,applicationContext-*.xml</param-value>
</context-param>

其中的param-value根据自己的applicationContext.xml存放位置决定。

配置Struts2环境


1、 把相关jar文件拷贝到项目中

STRUTS_HOME /apps/struts2-blank-2.1.8/WEB-INF/lib 目录下的相关jar文件
STRUTS_HOME/lib/struts2-spring-plugin-2.1.8.jar


2、 配置web.xml文件

可以从STRUTS_HOME /apps/struts2-blank-2.1.8/WEB-INF/web.xml文件中拷贝:

<filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
</filter-mapping>

另外可以这样配置字符编码过滤器:

<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true </param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>*.action </url-pattern>
</filter-mapping>


3、 在struts.xml中配置项拦截器

<interceptors>
           <interceptor-stack name="excludeParamsStack">
              <interceptor-ref name="defaultStack">
                  <param name="params.excludeParams">ext-comp-.*</param>
              </interceptor-ref>
           </interceptor-stack>
       </interceptors>

另外在struts.xml文件中常配置的两个常量:

<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="utf-8"></constant>


4、 在struts.xml中配置相关的Action

<action name="*-*" class="com.exam.student.actions.{1}Action" method="{2}">
       		<result>/{1}-{2}.jsp</result>
       		<result name="input">/WEB-INF/exam/{1}-{2}.jsp</result>
       		 <!-- <exception-mapping result="error" exception="java.sql.SQLException" />  
       		 <result name="error">/error.jsp</result> -->
</action>
除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/struts2-hibernate-spring-integration-of-the-basic-processes-and-procedures-and-related-configuration-details.html
关键字: , , , ,
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2011 7/23
如果您有更好的原创技术博文或者观点,欢迎投稿:admin@itzhai.com,或者关注订阅左侧浮动面板的微信号订阅IT宅itread)发送消息。
文章评论
    4条评论
  1. swyma 2012年02月17日07:43:41  #-49楼 回复 回复

    userDAO
    provinceDAO
    cityDAO
    sexDAO
    statusDAO

    以前配置过一次,不过好像没有这一步哦

    • arthinking 2012年02月17日08:28:51 回复 回复

      这个是配置事务的,有很多种配置方法。

  2. nai 2012年02月22日01:48:59  #-48楼 回复 回复

    不错,很有用,有空教教我

    • arthinking 2012年02月22日03:12:38 回复 回复

      乃哥太谦虚了,O(∩_∩)O哈哈~

给我留言

有人回复时邮件通知我
J2EE的相关文章
随机文章 本月热门 热评
1 8259A初始化过程步骤 2011/4/25
2 设计模式笔记 – Observer 观察者模式 (Design Pattern) 2011/11/3
3 使用JavaMail发送指定网页内容到其他邮箱 2011/10/7
4 Java笔记 – RTTI,Class,泛化的Class引用 2013/12/20
5 MyEclipse中修改CSS样式不起作用的解决方法 2011/6/4
6 8251A查询法收发数据的通信程序 2011/4/27
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
猜您喜欢
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.