Techsailor Social Media
Get Up Close & Personal with Techsailor!
我们用社会媒体连接人群
Sep
18
2009

Struts + Spring + iBATIS 集成开发

创建于 7:35 am

一、HCS项目需求

愿景:培训机构为学员提供培训相关的服务。

 

1.1 功能性需求:

1.2 非功能性需求

         用户方面:

                   体验好。

         开发人员方面:

                   易于白盒测试

         客户方面:

                   客户提供已存在的数据库。

                   规定时间内上线。

                   基于B/S 架构。

                  可以运行于 window Linux 系统。

 

1.3 架构触及的主要问题及决策:

1.        可以运行于 window Linux 系统。.

采用语言 Java

2.        易于白盒测试

分层开发,分层测试

3.        体验好。

采用 RIA 技术,根据程序员和成本的考虑,采用 AJAX,  排除Flex SilverLightJavaFX.

4.        基于B/S 架构。

采用 Java EE 技术

         5. 客户提供已存在的数据库。

                   在众多的 O/RM 模型加, 根据 Hibermate iBATIS 的特点:

                            Hibermate : 对领域对象模型和数据库中关系模型都拥有完全的控件权.

                            iBATIS : 开发一个针对该数据库的新应用程序,iBATIS就非常有用.

                   采用 iBATIS.

 

二、项目所采用的框架

2.1 Struts框架

         StrutsApache 基金会Jakarta 项目组的一个Open Source 项目。

Struts是一个基于JAVA EE平台的MVC框架,主要是采用ServletJSP技术来实现的。

         Struts MVC实现原理

2.2 Spring框架

         Spring 是分层的轻量级开源框架,以 Inverse of Control Aspect Oriented Programming 为内核,整合众多第三方框架。

         Spring 原理

Core Container

1.          Core            提供 Sping 的基本功能。

2.          Beans                   提供IoC和依赖注入功能

3.          Context                 扩展了 BeanFactory,添加了对I18N、系统生命周期事件、验证支持。

4.          Expression   提供对查询和操作对象时的表达式语言。

Data Access/Integration

1.          JDBC                  JDBC 支持进一层封装。

2.          ORM                  提供对象关系映射集成的支持。

3.          OXM                   提供 Object/XML 映射实现

4.          JMS            Java 信息服务的支持。

5.          Transaction   提供对事务管理的支持。

Web

1.          Web                      提供基本的Web集成功能

2.          Web-Servlet 提供Sping Model-View-Controller 的实现。

3.          Web-Portlet 提供 portlet Model-View-Controller 的实现。

 

AOP and Instrumentation

1.          AOP                      对面向切面提供了支持。

2.          Instrumentation      提供类工具支持和类载入器实现

 

Test

1.          Test    对测试框架的支持,如:JUnitTestNG.

 

2.3 iBATIS 框架

IBATIS是一种数据库访问工具,iBATISSQL映射成JAVA对象。将 Java Bean 映射成 PreparedStatement 的输入参数和输出ResultSet结果集。

 

输入部分:

         输入参数可以是 JavaBeanMapXML、原始数据类型(如:IntegerString)

处理部分:

         SqlMap.xml                    SQL映射文件, Java 对象映射成 SQL 语句。

         SqlMapConfig.xml           iBATIS 配置的核心,通过这个文件的配置提供给框架。

         SQL Map                                 Java Bean 映射成 PreparedStatement 的输入参数和输出ResultSet结果集。

         JDBC                             数据库驱动接口。

输出部分:

         输出参数可以是 JavaBeanMapXML、原始数据类型(如:IntegerString)

 

三、框架整合:

3.1 Struts Spring 整合

3.1.1集成原理

                  Struts Spring 整合部分:集成方案有二种:

集成方案一:在 Action 中获取 BeanFactory 对象,然后通过 BeanFactory 获取业务逻辑对象

集成方案二:将业务逻辑对象通过 Spring 注入到 Action 中, 从而避免了在 Action 类中的直接代码查询。

这里我们使用第二种, 为了减少依赖性:

        

3.1.2 集成实现

1. Action 代码:

public class HelloWorkAction extends Action

{

     private SqlMapClient sqlMapClient;

     public void setSqlMapClient(SqlMapClient sqlMapClient){

         this.sqlMapClient = sqlMapClient;

     }

     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws SQLException, IOException   {

         List list = sqlMapClient.queryForList("getAllList", "asdfsadf");

         PrintWriter writer = response.getWriter();

         writer.println(list);

         return null;

     }

}
 
applicationContext.xml

<bean name="/helloWork" class="com.yourcompany.struts.action.HelloWorkAction" scope="prototype">

     <property name="sqlMapClient" ref="sqlMapClient"/>

</bean>
struts-config.xml

<action-mappings>

         <action path="/helloWork"

              type="org.springframework.web.struts.DelegatingActionProxy">

         </action>

</action-mappings>
Web.xml

<listener>

     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<context-param>

     <param-name>contextConfigLocation</param-name>

     <param-value>classpath*:application*.xml</param-value>

</context-param>
 
注意:struts-config.xml action path="/helloWork" 要和 applicationContext.xml <bean name="/helloWork" 相同

 

 

 

3.2 iBATIS Spring 整合部分:

3.2.1 集成原理

整合思想:使用 Spring Ibatis 的支持, Spring 作为客户端调用 iBATIS 服务端服务。

Spring 提供的整合类:

1.   org.springframework.orm.ibatis.SqlMapClientFactoryBean 用来创建一个com.ibatis.sqlmap.client.SqlMapClient对象。

2.   org.springframework.orm.ibatis.SqlMapClientTemplate 用来对com.ibatis.sqlmap.client.SqlMapClient进行一层封装,为提高易用性。

3.2.2 集成实现

整合配置:

<bean id="sqlMapClient"     class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

     <property name="configLocation">

         <value>classpath:SqlMapConfig.xml</value>

     </property>

</bean>

<bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">

<property name="sqlMapClient">

         <ref bean="sqlMapClient" />

     </property>

</bean>

可以不配置:Spring dataSource, 在初始化 SqlMapClientFactoryBean 时,可以不把 dataSource 设置过去。

 

Spring 调用 iBATIS 的代码:

BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");

 

SqlMapClient sqlMapClient = (SqlMapClient) factory.getBean("sqlMapClient");

List list = sqlMapClient.queryForList("getAllList", "asdfsadf");

for (int i = 0; i < list.size(); i++)

{

     System.out.println(list.get(i));

}

 

SqlMapClientTemplate sqlMapClientTemplate = (SqlMapClientTemplate) factory.getBean("sqlMapClientTemplate");

List list1 = sqlMapClientTemplate.queryForList("getAllList", "asdfsadf");

for (int i = 0; i < list1.size(); i++)

{

     System.out.println(list1.get(i));

}

 

 

3.3 分工协作/测试

         根据持久层、业务逻辑层、表现层分工协作,各层负责人必须对该层的接口负责。各层之间通过接口通信。

         测试工具采用: JUnit.

 

四、项目代码信息结构:

4.1 目录结构

 

 

 

 

4.2 配置信息:

 

 

 

 

 

 

 

 

五、运行时系统:

 

 

 


查看更多的评论