Struts2+Spring+Ibatis集成归拢

Struts2+Spring+Ibatis集成合并

           上一篇博客讲述了Struts2+Spring的集成合并,主要是利用了一个中间jar包,这篇博客在加上Ibatis持久层框架,三个框架进行合并。其中Struts2Spring部分和前边的一样,主要是讲解SpringIbatis之间的合并,这里也涉及到SpringAOP编程思想,声明式事务的使用。

 

        一,看一下分工吧:

                  Struts2:负责流程控制,主要针对的是从JSP页面到action类这一块的步骤。

                  Spring:负责各个类,对象的创建,包括actionservice,dao,数据连接对象,Ibatis框架的核心对象sqlMapClientSpring自身的事务处理扩展对象transactionManager

                 Ibatis:负责对JDBC的封装,简化访问数据的程序。

  

        二,环境的搭建:

                   1,需要考入的jar包:

commons-fileupload-1.2.1.jar(Struts2:文件上传)

commons-io-1.3.2.jar(Struts2:文件上传)

freemarker-2.3.15.jar(Struts2:视图展现技术)

ognl-2.7.3.jar(Struts2:对象图形导航语言,用于做数据操作)

struts2-core-2.1.8.1.jar(Struts2:核心jar包)

xwork-core-2.1.6.jar(Struts2:webwork框架的核心jar包)

commons-logging.jar(Spring:日志输出操作,实现日志输出的转换)

junit-3.8.2.jar(非必须:单元测试jar包)

log4j-1.2.15.jar(非必须:日志输出jar包)

spring.jar(Spring:核心jar包)

struts2-spring-plugin-2.1.8.1.jar(Struts2Spring的合并jar包)

c3p0-0.9.1.2.jar(做数据源操作的jar包)

ibatis-2.3.4.726.jar(Ibatis:核心jar包)

ojdbc14.jar(oracle数据库的连接jar包)

aspectjrt.jar(Spring:支持AOP功能的jar包)

aspectjweaver.jar(Spring:支持AOP功能的jar包)

cglib-nodep-2.1_3.jar(Spring:实现基于继承的动态代理)

 

                  2,拷贝进去的配置文件:

                       Struts2:struts.xml

                      Spring:applicationContext.xml

     Ibatis:SqlMapConfig.xml  SqlMap.xml

     日志输出的属性文件:log4j.properties

      配置数据库连接信息:db.properties

 

            三,各个配置文件的编写:


                  1struts.xml中,主要用来配置action类,

<package name="system" namespace="/system" extends="struts-default">		        <action name="insertUser" class="userAction" method="insert">
		            <result name="success" type="redirect">/userlist.jsp</result>
		            <result name="error" type="redirect">/error.jsp</result>
		        </action>
		    </package>


                 2applicationContext.xml:


			<?xml version="1.0" encoding="UTF-8"?>
			 
			<beans xmlns="http://www.springframework.org/schema/beans"
					xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
					xmlns:aop="http://www.springframework.org/schema/aop"
					xmlns:tx="http://www.springframework.org/schema/tx"
					xsi:schemaLocation="
						http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
						http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
						http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
			 
			    
				<bean id="loginAction" class="com.ljh.action.LoginAction" scope="prototype">
					<property name="userService" ref="userService"></property>
				</bean>
				 
				<!-- action层类的设置,关联service -->
				<bean id="userAction" class="com.ljh.action.UserAction" scope="prototype">
					<property name="userService" ref="userService"></property>
				</bean>
				<!-- service层类的设置,关联dao -->
				<bean id="userService" class="com.ljh.service.UserService" >
					<property name="userDao" ref="userDao"></property>
				</bean>
			    <!-- dao层类的设置 ,关联sqlMapClient-->
				<bean id="userDao" class="com.ljh.dao.UserDao">
					<property name="sqlMapClient" ref="sqlMapClient"></property>
				</bean>
				 
				<!-- 表示把属性资源文件的信息加载到Spring环境中进行利用 -->
				<bean class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
					<property name="locations">
						<list>
							<value>classpath:db.properties</value>
						</list>
					</property>
				</bean>
				 
				<!-- 配置C3P0数据源连接池,通过读取属性文件 -->
				<bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
					<property name="user" value="${username}"></property>
					<property name="password" value="${password}"></property>
					<property name="jdbcUrl" value="${url}"></property>
					<property name="driverClass" value="${driverClass}"></property>                
				</bean>
			 
				<!-- IBatis核心对象sqlMapClient的声明 ,通过工厂SqlMapClientFactoryBean和IBatis核心配置文件-->
				<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
					<property name="dataSource" ref="c3p0"></property>
					<property name="configLocations">
						<list>
							<value>classpath:SqlMapConfig.xml</value>
						</list>
					</property>
				</bean>
				 
				<!-- 配置功能扩展对象 - 事务管理,通过c3p0 -->
				<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
					<property name="dataSource" ref="c3p0"></property>
				</bean>
				 
				<!-- 声明事务管理AOP功能 -->
				<aop:config>
					<aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.ljh.service.*.*(..))"/>        
				</aop:config>        
				 
				<!--事务的配置-->
				<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
					<tx:attributes>
						<tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT" rollback-for="java.lang.Exception"/>
						<tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT" rollback-for="java.lang.Exception"/>
						<tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT" rollback-for="java.lang.Exception"/>
						<tx:method name="select*" read-only="true"/>
					</tx:attributes>
				</tx:advice>
			 
			</beans>


                   3SqlMapConfig.xml

			<sqlMapConfig>
				<!-- 只需配置映射文件即可 -->
				<sqlMap resource="com/ljh/bean/User.xml" />

</sqlMapConfig>


                   4,User.xml(SqlMap.xml)

			<sqlMap namespace="empSQL">
			        <insert id="insertUserSQL">
					insert into t_user(usercode,userpswd,username,orgtype,regdate) values(#usercode#,#userpswd#,#username#,#orgtype#,#regdate#)
				</insert>

</sqlMap>

                     5,属性文件db.properties:


				url=jdbc:oracle:thin:@127.0.0.1:1521:ljh
				driverClass=oracle.jdbc.driver.OracleDriver
				username=scott

password=ti



            四,对于jsp和其他三层这里不再给出。但是提醒一点,service中需要将Exception剖出,这样才会被框架捕捉到,事务才能起作用。Dao层可以直接使用sqlMapClient来调用其中的增删改查的方法。

 

    

           这样我们的三个框架的合并就算完成,在实际中,根据业务进行相关类的添加,相关配置文件的补充即可。总之多运用。


4楼lishehe1小时前
学习
3楼a363722188昨天 23:52
想问一下楼主 你接触到的项目中有没有struts2+spring+ibatis结构的,然后就是像你这样子搭建的项目架子?
2楼cheng100523578昨天 23:30
mark
1楼zhaojike昨天 23:13
很不错的内容。