Struts2+Hibernate4+Spring4的开发环境主要指的是使用Spring的IoC来控制Struts2中的Action和Hibernate的SessionFactory,因此搭建的两个方面分别是Spring管理Struts和Spring管理Hibernate。Spring管理Struts的时候我们需要一个struts2-spring-plugin包,有了这个包,struts.xml中填写的action的class就不再是真实的class文件,而是applicationContext.xml中的一个bean的id,而这个bean才真正代表着action。Spring管理Hibernate的时候,我们不再需要Hibernate.cfg.xml,相应的连接处数据源配置直接作为bean写在applicationContext.xml中。此外SessionFactory也作为bean存在。Entity类作为SessionFactory的属性存在。不多说,现在就来看一看吧。
pox文件中需要的repository依赖
struts2-spring-plugin:2.3.24.1
hibernate-core:5.02.Final
struts-core:2.3.24.1
c3p0:0.9.1.2
spring-orm:4.0.3.RELEASE
mysql-connector-jave:5.1.6
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>Archetype Created Web Application</display-name> <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> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> </web-app>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <constant name="struts.i18n.encoding" value="GBK"/> <constant name="struts.devMode" value="true"/> <constant name="struts.enable.DynamicMethodInvocation" value="false"/> <package name="cao" extends="struts-default"> <action name="login" class="loginAction"> <result name="success">/WEB-INF/success.jsp</result> <result name="error">/WEB-INF/error.jsp</result> </action> </package> </struts>
applicationContext.xml
<?xml version="1.0" encoding="GBK"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <!-- ************************hiberante******************************** --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" p:driverClass="com.mysql.jdbc.Driver" p:jdbcUrl="jdbc:mysql://localhost/cmdb" p:user="root" p:password="cm123" p:maxPoolSize="40" p:minPoolSize="2" p:initialPoolSize="2" p:maxIdleTime="30"/> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" p:dataSource-ref="dataSource"> <!-- annotatedClasses is showed in this list --> <property name="annotatedClasses"> <list> <!-- write all of your pojo class--> <value>com.pojo.Users</value> </list> </property> <!-- 定义Hibernate SessionFactory的属性 --> <property name="hibernateProperties"> <props> <!-- 指定Hibernate的连接方言 --> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQL5InnoDBDialect </prop> <!--是否根据Hiberante映射创建数据表 --> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> </bean> <!-- *************下面的配置就是正常的Spring的Bean的配置了***************** --> <bean id="dao" class="com.pojo.Dao" p:sessionFactory-ref="sessionFactory"/> <bean id="judge" class="com.judge" p:dao-ref="dao"/> <bean id="loginAction" class="com.LoginAction" scope="prototype" p:j-ref="judge" /> </beans>
在存在依赖的类中,我们需要将依赖object看做是一个属性,然后设置set跟get方法。在需要调用SessionFactory的类中,一样道理,将SessionFactory看做是属性。然后使用如下代码得到SessionFactory。
Session sess=getSessionFactory().openSession(); Transaction tx=sess.beginTransaction(); Users u=new Users(); u.setLevel(4); sess.save(u); tx.commit();
在eclipse下使用maven搭建Struts2,Hibernate4和Spring4开发环境
原文:http://mengcao.blog.51cto.com/9395052/1703395