`
xinggm
  • 浏览: 65725 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

将Struts、Spring和ibatis的组合在一起

阅读更多

三者的组合方式
   
    Struts仍然是只负责MVC这部分。也就是说,虽然项目中是使用三者相结合的方式,但实际上,Strtus的配置文件,与Spring和ibatis是独立的。
   
    而Spring和ibatis则组合在一起负责项目中数据库操作的部分。在ibatis中定义相关的数据库操作和映射。而由Spring的ORM包负责制作DAO对象。并利用Spring的事务管理机制,再将DAO对象包装进Facade对象中。
   
    所以,此文的重点是Spring和ibatis的组合。
   
    Spring和ibatis的配置文件可以放在许多地方,既可以放在Web Root下,也可以放在ClassPath下。区别就在于取得配置文件的方式不一样。这个放到最后再说。
   
    练习项目中,Spring和ibatis的配置文件都是放在/WEB-INF/下了,而ibatis的具体数据库操作、映射的配置文件是放在ClassPath里的包中的。此文就以此来说明。
   
   
建立配置文件
   
applicationContext.xml
   
    建立Spring配置文件:
   
    首先,在WEB-INF/这个目录下建立一个Spring的配置文件,名为applicationContext.xml,内容如下
   
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <import resource="ibatis-config.xml"/> <!-- 这里导入了另一个文件,如果在web.xml中声明了就不用写 -->

    <bean id="baseTransactionProxy"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
        abstract="true">
        <property name="transactionManager">   <!-- 它有个属性叫“事务经理”,下面会声明的 -->
            <ref bean="transactionManager" />
        </property>
        <property name="transactionAttributes">    <!--这里就声明了具体的事务 -->
            <props>
                <prop key="insert*">PROPAGATION_REQUIRED</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop>
                <prop key="check*">PROPAGATION_REQUIRED</prop>
                <prop key="del*">PROPAGATION_REQUIRED</prop>
                <prop key="forbid*">PROPAGATION_REQUIRED</prop>
                <prop key="inforbid*">PROPAGATION_REQUIRED</prop>
                <prop key="change*">PROPAGATION_REQUIRED</prop>
                <prop key="process*">PROPAGATION_REQUIRED</prop>
                <prop key="finish*">PROPAGATION_REQUIRED</prop>
                <prop key="redo*">PROPAGATION_REQUIRED</prop>
                <prop key="reject*">PROPAGATION_REQUIRED</prop>
                <prop key="confirm*">PROPAGATION_REQUIRED</prop>
                <prop key="cancel*">PROPAGATION_REQUIRED</prop>
                <prop key="undel*">PROPAGATION_REQUIRED</prop>
                <prop key="modify*">PROPAGATION_REQUIRED</prop>
                <prop key="copy*">PROPAGATION_REQUIRED</prop>
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>
    </bean>

    <bean id="transactionManager"    <!-- 这位就是管理事务的经理了 -->
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    </beans>
   

ibatis-config.xml

    然后,写另一个名为ibatis-config.xml的Spring配置文件,里面配置了数据库的连接,以及各个DAO和包装这些DAO的Facade。
   
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <bean id="dataSource"    <!-- 这里定义了数据源 -->
        class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="org.postgresql.Driver" />
        <property name="url"
            value="jdbc:postgresql://localhost:5432/webtest" />
        <property name="username" value="postgres" />
        <property name="password" value="postgres" />
        <property name="maxActive">
            <value>20</value><!-- -1 means no limit -->
        </property>
        <property name="maxIdle">
            <value>10</value>
        </property>
        <property name="maxWait">
            <value>5000</value>
        </property>
        <property name="initialSize">
            <value>4</value>
        </property>
        <property name="maxOpenPreparedStatements">
            <value>-1</value><!-- -1 means no limit -->
        </property>
    </bean>


    <!-- SqlMap setup for iBATIS Database Layer -->
    <bean id="sqlMapClient"
        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation"
            value="/WEB-INF/sqlMapConfig.xml" /> <!-- 这里定义了ibatis的配置文件所在的位置 -->
        <property name="dataSource" ref="dataSource" />
    </bean>

    -<!-- 下面定义了DAO对象 -->
   
    <bean id="userDao" class="dao.user.UserDao">
        <property name="sqlMapClient" ref="sqlMapClient" />
    </bean>

    <bean id="orderDao" class="dao.order.OrderDao">
        <property name="sqlMapClient" ref="sqlMapClient" />
    </bean>

    <bean id="proDao" class="dao.base.ProductClassDao">
        <property name="sqlMapClient" ref="sqlMapClient" />
    </bean>

    <bean id="errDao" class="dao.base.ErrorClassDao">
        <property name="sqlMapClient" ref="sqlMapClient" />
    </bean>

<!-- 这里就是Facade了,注意,它有个parent属性,就是这个属性,使它的操作受到了事物管理的限制 -->
    <bean id="baseFacade" parent="baseTransactionProxy">
        <property name="target">
            <bean class="facade.BaseFacadeImpl"><!-- 把DAO做为属性注入到Facade中去 -->
                <property name="proDao" ref="proDao" />
                <property name="errDao" ref="errDao" />
                <property name="userDao" ref="userDao" />
                <property name="orderDao" ref="orderDao" />
            </bean>
        </property>
    </bean>
</beans>
   
   
sqlMapConfig.xml
   
    好,接下来,根据在上个配置文件中的定义,在WEB-INF目录下,创建ibatis的配置文件,也就是sqlMapConfig.xml:
   
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
    "http://www.ibatis.com/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

    <settings cacheModelsEnabled="true" enhancementEnabled="true"
        lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32"
        maxSessions="10" maxTransactions="5" useStatementNamespaces="false" />
<!-- 这里定义了具体的SqlMap配置文件的位置,注意看路径,是放在ClassPath目录下的 -->
    <sqlMap resource="dao/ibatis/maps/userMap.xml" />
   
    <sqlMap resource="dao/ibatis/maps/baseMap.xml" />

    <sqlMap resource="dao/ibatis/maps/orderMap.xml" />

</sqlMapConfig>


userMap.xml

    之后,再给出一个SqlMap文件的内容。根据上面的定义,文件放在dao.ibtis.maps这个包下,名为userMap.xml:
   
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">

<sqlMap namespace="userMap"><!-- 定义了命名空间 -->

    <resultMap id="result" class="form.LoginUserForm"><!-- 这里就是映射关系了 -->
        <result property="username" column="login_user_name" /><!-- Bean中的属性和查询结果的列对应 -->
        <result property="password" column="login_password" />
    </resultMap>

    <typeAlias alias="user" type="form.LoginUserForm" /><!-- 定义了别名,注意,不能有重复 -->
   
    <select id="selectUser" parameterClass="user" resultMap="result"><!-- 定义了参数对象和返回的对象 -->
        select * from login_user where login_user_name=#username# and login_password=#password#
    </select>
</sqlMap>
   
   
web.xml
   
    好了,现在Spring和ibatis的配置文件都搞定了。下面就是具体的使用了。但是,为了使程序能够顺利的拿到配置文件,我们还需要在web.xml配置一个监听器,和一个Context参数。如下:
   
    <listener>
        <listener-class>   
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
        </listener>
   
    <context-param>        <!-- 这里配置了Spring文件的位置,如果有多个,用空格或回车分开 -->
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
        </context-param>    <!-- 如果这里配置了多个文件,就不需要在Spring文件中用Import了 -->
   
   
    嗯,现在才算是全部的配置文件都搞定了。
   
具体使用方法:
   
    众观全部的配置文件,最核心的部分,就是在Spring的配置文件中声明过的,名叫baseFacade的Facade了。它拥有四个Dao作为它的成员。Spring在实例化它时,会实例化这四个DAO对象,并把它们注入到Facade中去。好Cool!
   
    那,我们应该如何拿到这个Facade对象呢?别急,先看看我在这个练习项目中,这个Facade是如何被使用的。
   
    我建立了一个名叫BaseAction的类,它继承自Struts中的Action类。在它里面就放了一个Facade成员。之后,所有需要访问到数据库的Action都继承自这个BaseAction,就可以直接调用父类中的Facade成员来执行相关的操作了。
   
    下面,给出BaseAction类的代码:
   
    /**
    * in package action.base
    * BaseAction.java   
    * Jun 14, 2007
    */
    package action;
   
    <!-- 省去Imports细节 -->
   
    /**
    * @author liang-zhang
    *
    */
    public class BaseAction extends Action {
   
        private IBaseFacade baseFacade;
       
        @Override <!-- 覆盖掉父类的初始化方法 -->
        public void setServlet(ActionServlet as) {
            // TODO Auto-generated method stub
            super.setServlet(as);<!-- 执行父类的方法 -->
           
    <!-- 这里就可以拿到这个Facade实例了 -->
            ServletContext servletContext=as.getServletContext();
            WebApplicationContext wac =             WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
            this.baseFacade = (IBaseFacade) wac.getBean("baseFacade");
   
    <!-- 这是另一种拿法,Spring文件同样在WEB-INF目录下 -->
    <!-- 但是,SqlMapConfig文件似乎只能放在ClassPath目录下 -->
    //        XmlBeanFactory factory = new XmlBeanFactory(new ServletContextResource(
    //        as.getServletContext(), "WEB-INF/applicationContext.xml"));
    //        this.baseFacade = (IBaseFacade) factory.getBean("baseFacade");
           
    <!-- 这是第三种拿法了,当所有的配置文件都入在ClassPath下时可用 -->
    //        XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource(
    //                "applicationContext.xml"));
    //        this.baseFacade = (IBaseFacade) factory.getBean("baseFacade");
        }
   
        public IBaseFacade getBaseFacade() {
            return baseFacade;
        }
   
        public void setBaseFacade(IBaseFacade baseFacade) {
            this.baseFacade = baseFacade;
        }
       
    }

分享到:
评论

相关推荐

    spring+struts2+ibatis整合的jar包

    当我们把Spring、Struts2和iBatis整合在一起时,可以构建出一个高效、模块化的Web应用。Spring作为整体的框架容器,负责管理所有的Bean,包括Struts2和iBatis的相关组件。Struts2处理HTTP请求,调用Spring管理的业务...

    struts+spring+ibatis的Demo

    这个"struts+spring+ibatis的Demo"压缩包文件提供了这三个框架集成使用的示例代码,旨在帮助开发者理解和学习如何将它们有效地结合在一起。 **Struts 2框架** Struts 2是一个基于MVC设计模式的Web应用框架,它继承...

    struts1+ibatis+Spring demo

    这个"struts1+ibatis+Spring demo"是一个示例项目,展示了如何将这三个框架集成到一起,实现一个完整的Web应用。 Struts1是Apache组织开发的一个开源MVC框架,它主要负责控制应用程序的流程,通过Action类处理用户...

    struts1.2 spring2 ibatis 集成项目实战源码

    这个集成项目的源码会展示如何将这三个框架集成在一起。通常,Spring作为核心容器,负责管理所有对象,包括Struts的Action和iBatis的SqlSession。在请求到达时,Struts会调用由Spring管理的Action,Action执行业务...

    struts2 spring ibatis 整合架构

    将这三个框架整合在一起,可以构建出高效、灵活的企业级应用。 **Struts2** 是一个基于MVC设计模式的Web应用框架,它提供了一种组织应用程序的方式,使得开发者可以更好地处理HTTP请求和响应。Struts2的核心是...

    struts2+spring+ibatis整合项目实例

    在本实例中,`spring2.5.5+struts2+ibatis2.3.4登录实例.doc`可能包含了一个基本的登录功能的实现,展示了Struts2的Action配置和结果转发。 2. **Spring**:Spring框架是企业级Java应用的核心容器,提供了依赖注入...

    spring3+struts2+ibatis

    在现代企业级Web应用开发中,Spring、Struts2和Ibatis是常见的三大组件,它们各自负责不同的职责,共同构建出高效、灵活的应用架构。Spring作为全能型的框架,提供依赖注入(DI)和面向切面编程(AOP)等功能;...

    struts+spring+ibatis框架集成.pdf

    Struts2、Spring和iBatis是三种广泛应用于Java企业级开发的开源框架,它们各自在不同的领域提供了强大的功能,并且可以很好地集成在一起,形成一套完整的MVC(模型-视图-控制器)架构。 Struts2是基于MVC设计模式的...

    struts2 + spring + ibatis 整合例子

    将这三个框架整合在一起,可以构建出高效、灵活且易于维护的Web应用程序。下面我们将详细介绍这三个框架以及它们的整合过程。 **Struts2框架**: Struts2是一个基于MVC设计模式的Web应用框架,它提供了丰富的控制器...

    struts2+ibatis+Spring+Json+jquery

    Struts2、Spring和iBatis是Java Web开发中常用的三个框架,它们分别负责不同的职责。Struts2作为MVC框架,主要处理用户请求并控制应用程序的流程;Spring则是一个全面的后端框架,提供了依赖注入、事务管理、AOP...

    struts2+spring+ibatis学生管理demo

    Struts2+Spring+Ibatis学生管理Demo是一个典型的Java Web应用程序,它展示了如何将三个流行的开源框架——Struts2、Spring和Ibatis有效地集成在一起,用于构建高效且可维护的学生信息管理系统。在这个系统中,Struts...

    ▲Struts+Spring和iBatis整合

    在本示例中,我们将探讨如何将这三者整合在一起,形成一个强大的后端架构。 首先,Struts是Apache软件基金会下的一个开源MVC(Model-View-Controller)框架,它主要用于处理HTTP请求,并将这些请求映射到相应的业务...

    spring3 ibatis struts2 搭建的简单项目

    依赖注入允许开发者在运行时通过外部配置将对象组合在一起,而AOP则允许我们在不修改代码的情况下添加额外的功能,如日志记录、事务管理等。 其次,iBatis是一个轻量级的持久层框架,它将SQL与Java代码分离,使...

    Spring+Struts2+IBatis 项目整合(四)

    在本项目整合中,我们将探讨如何将三个著名的技术框架——Spring、Struts2和IBatis——集成在一起,创建一个高效且灵活的企业级Web应用程序。这个整合通常被称为SSH(Spring、Struts2、Hibernate或iBatis)框架栈,...

    Struts_Spring_Ibatis

    Struts、Spring 和 iBatis 是 Java Web 开发中的三个重要框架,它们组合在一起形成了一个强大的后端开发解决方案。这个名为 "Struts_Spring_Ibatis" 的项目或教程可能旨在教你如何有效地集成这三个框架,创建出高效...

    struts+spring+ibatis+mysql整合小例子(适用于新手)

    Struts、Spring、Ibatis和Mysql是Java Web开发中常用的四大框架,它们组合在一起可以构建出高效、灵活的企业级应用程序。本示例是专为新手设计的一个整合教程,通过详细注解帮助初学者理解这四个组件如何协同工作。 ...

    Spring-Struts-IBatis-AOP-Transaction

    在 "17-Prj-Spring-Struts-IBatis-AOP-Transaction" 这个项目中,这四个框架被集成在一起,形成一个强大的 web 应用开发解决方案。Spring 作为整个系统的基石,负责依赖注入和事务管理;Struts 2 处理 HTTP 请求,...

    Struts+Spring+Ibatis jar

    总的来说,"Struts+Spring+Ibatis"的组合为Java Web开发提供了一种成熟的解决方案,它通过各框架的协同工作,简化了开发过程,提高了代码的可维护性和可扩展性。而"SSI-jar包"则是为了方便开发者快速构建基于这种...

    spring、struts、ibatis框架搭建流程

    通过上述步骤,可以成功地将Spring、Struts和iBatis这三个框架集成到一起,搭建出一个完整的Java Web应用程序架构。这样的架构不仅提供了灵活的应用程序开发方式,还能够很好地支持MVC模式的设计思想,使得应用程序...

    struts2 spring ibatis2.3整合

    在"struts2 spring ibatis2.3整合"中,我们将看到如何将这三个框架结合在一起,实现一个完整的Java Web应用架构。首先,Struts2和Spring的整合主要是通过Struts2的Spring插件来完成的,这个插件允许我们在Struts2的...

Global site tag (gtag.js) - Google Analytics