`

【原创】项目中Spring MVC + Ibatis的一点理解

阅读更多
本人不才,刚接触Ibatis不久,然后需要整和到项目中,下面是和Spring+Ibatis的实现,欢迎拍砖,撒花。。。

Web.xml中  

#片段1:
<servlet>
    <servlet-name>AcubeFramework</servlet-name>

        <servlet-class>

        com.sds.acube.framework.core.servlet.AcubeDispatcherServlet

        </servlet-class>

        <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>

    <servlet-name>AcubeFramework</servlet-name>

    <url-pattern>*.do</url-pattern>
</servlet-mapping>

那么必须有个AcubeFramework-servlet.xml文件,这是spring实现MVC的主配置文件(包含请求拦截[View],bean的管理[Control],与数据库之间的交互[Model]等等)
因为在这个项目中AcubeDispatcherServlet 继承了 DispatcherServlet 并且重写了init()方法,在init()web容器启动即调用,中做了一些与ContextLoaderListener相似的工作,与下面的代码片段达到的功能一致

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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" version="2.5">

<display-name>Spring Annotation MVC Sample</display-name>
<!--  Spring 服务层的配置文件 ContextLoaderListener监听器先对contextConfigLocation进行检查,有并且有多个用分隔符分开(逗号,空格),如果没有设置该参数,将从/web-info/applicationContext.xml作为默认值-->
<context-param>
<param-name>contextConfigLocation</param-name>        
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--  Spring 容器启动监听器 初始化Spring的一些配置信息,web容器启动即加载-->
<listener>        
    <listener-class>
org.springframework.web.context.ContextLoaderListener 
    </listener-class>
</listener>
<!--  Spring MVC 的Servlet,它将加载WEB-INF/annomvc-servlet.xml 的配置文件,以启动Spring MVC模块,下面的代码块被上面得“#片段1”代码块代替-->
<servlet>
<servlet-name>annomvc</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>annomvc</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>


AcubeFramework-servlet.xml  部分片断

<!-- Other ViewResolvers Added -->
<bean id="defaultViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property
        name="viewClass"
        value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value=""/>
    <property name="suffix" value=""/>
</bean>
<import resource="/classes/config/pkm/pkm-context.xml"/>


在下面Pkm-context.xml中 (引入view.property,pkm-sqlmap.xml 和  pkm-blog-spring.xml)

<!--ViewResolvers  - configuration : /WEB-INF/classes/config/views.properties   -->

<bean id="otherViewResolver"
class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
    <property name="order" value="1" />

    <property name="basename" value="config.views" /><!--用来绑定/WEB-INF/classes/config/views.properties 资源文件view层-->

    <property name="defaultParentView" value="defaultViewResolver" />

</bean>
 

<bean id="pkmSqlMapClient"

    class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
    <property name="dataSource"><ref local="pkmDataSource" />
    </property>
    <property name="configLocation">

      <value>/WEB-INF/classes/config/pkm/pkm-sqlmap.xml</value>

    </property>
    <!-- SqlMap Config for iBATIS  Spring中整合了Ibatis通过SqlMapClientFactoryBean来解析pkm-sqlmap.xml读取其中的信息-->
</bean>

<!--连接池-->  
<bean id="pkmDataSource"    
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" lazy-init="false">  
    <property name="driverClassName" value="${pkm.jdbc.driverClassName}"/>  
    <property name="url" value="${pkm.jdbc.url}"/>  
    <property name="username" value="${pkm.jdbc.username}"/>  
    <property name="password" value="${pkm.jdbc.password}"/>  
    <property name="initialSize" value="5"/>  
    <property name="maxActive" value="10"/>  
    <property name="maxWait" value="60000"/>  
    <property name="poolPreparedStatements" value="true"/>     
</bean>

<bean id="propertyConfigurer"    
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
<!--PropertyPlaceholderConfigurer类来读取xxx.properties配置文件信息,以key和value的形式-->  
<property name="locations">  
    <list>  
        <value>  
          /WEB-INF/classes/config/pkm/environment/jdbc.properties   
        </value>  
        <value>  
          <!--多个xxx.properties文件-->  
        </value>  
    </list>  
</property>  
</bean> 

<import resource="/blog/pkm-blog-spring.xml" />


jdbc.properties文件中的配置如下
pkm.jdbc.driverClassName=oracle.jdbc.OracleDriver   
pkm.jdbc.url=jdbc\:oracle\:thin\:@109.52.20.31\:1521\:orcl<!--把符号做转译-->   
pkm.jdbc.username=pkmuser   
pkm.jdbc.password=dbl0gin   
pkm.jdbc.dataSource=pkmDataSource  


在config/view.property 文件中配置如下

RegistBlognityGrouping.class=org.springframework.web.servlet.view.JstlView

RegistBlognityGrouping.url=/jsp/pkm/blog/RegistBlognityGrouping.jsp

RegistBlognityGrouping是 在返回ModelAndView对象所定位的字符串
这样以来Spring完成了对view层分层封装


pkm-sqlmap.xml文件中 配置了与数据库交互的SQL文件通过pkmSqlMapClient来读取

<sqlMapConfig>
    <settings
        cacheModelsEnabled="false"

        enhancementEnabled="true"

        lazyLoadingEnabled="true"

        useStatementNamespaces="true"/>

    <sqlMap resource="config/pkm/blog/sqlmap/Grouping-SQL.xml"/>
    <sqlMap resource="config/pkm/blog/sqlmap/TeamWebsiteManage-SQL.xml"/> 

<!--可以配置更多的xxx   -SQL.xml文件-->

</sqlMapConfig>



pkm-blog-spring.xml文件 (配置view层面的URL mapping和bussiness功能 bean的依赖关系) 按模块可以拆分成多个配置文件

附加部分Java 代码方便理解
public class GroupingFormController extends SimpleFormController{
    
    protected ModelAndView OnSubmit(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)throws Exception {
    
    Grouping grouping = (Grouping)command;//command 所代表的 Formbean对象是可以直接强转为某个实体bean对象的,主要设置了commandClass
    
    WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
    
    GroupingProxyService groupingProxyService = ctx.getBean("groupingProxyService")//必须有一个groupingProxyService "<bean>...</bean>"
    
    if(...){
     
       return new ModelAndView(getSuccessView(),"list",list );
    
    }else{
        return new ModelAndView(getFormView());
    }
  }  

}


<!-- Handler Mappings -->

<bean id="blogHandlerMapping"   class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

    <property name="order" value="2" />

    <property name="mappings">

       <props>

         <prop

key="/*/blog/RegistBlognityGrouping.go">GroupingFormController</prop>
        <!--也可以配制多个prop,一般都会按功能分成多个xml文件-->
       </props>

    </property>

</bean>

<!--
GroupingFormController  (继承)extends SimpleFormController  用于处理一些简单的表单
-->
<bean id="GroupingFormController"

class="com.sds.acube.wp.pkm.blog.controller.GroupingFormController">

    <property name="sessionForm" value="true"></property>

    <property name="commandName" value="command"></property>
    <!--Spring 绑定表单的command对象-->

    <property name="commandClass" value="com.sds.acube.wp.pkm.blog.dmo.Grouping"></property>
    <!--有默认的构造方法,可被实例化的JavaBean -->
    <!--command 所代表的 Formbean对象是可以直接强转为某个实体bean对象的,主要设置了commandClass-->

    <!--show form view -->
    <property name="formView" value="RegistBlognityGrouping"></property>
    <!--显示表单不需要任何代码,Spring自动完成,所以在提交该表单的时候,Spring通过formView的属性来获知该页面提交的action地址,不像Struts显示和提交是2个不同的地址 在GroupingFormController中调用OnSubmit(...)方法,验证失败会调用getFormView() 方法,直接返回RegistBlognityGrouping.jsp 页面-->

    <!--submit form success view-->
    <property name="successView" value="RegistBlognityGrouping.go"></property>
<!-- 在GroupingFormController中调用OnSubmit(...)方法,成功会调用getSuccessView() 方法,执行RegistBlognityGrouping.go之后的页面-->

    <property name="groupingService"><ref local="groupingProxyService" /></property><!-- service -->

</bean>

<!-----------------------两种Controller 分割线------------------------->
<!--
GroupingController 继承(extends) MultiActionController  多用于各类查询
-->
<bean id="GroupingController"

    class="com.sds.acube.wp.pkm.blog.controller.GroupingController">

    <property name="groupingService"><ref local="groupingService"/></property>

    <property name="methodNameResolver"><ref local="groupingMethodNameResolver"/></property>

</bean>

<!--ParameterMethodNameResolver  请求需要哪一个方法做处理 例如exec=list-->
<bean id="groupingMethodNameResolver"
  class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">

    <property name="paramName"><value>exec</value></property>

    <property name="defaultMethodName"><value>list</value></property>

</bean>

<!--将pkmSqlMapClient注入到DAO中-->
<bean id="groupingDAO"
class="com.sds.acube.wp.pkm.blog.dao.impl.GroupingSqlMapDAOImpl">

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

</bean>

<!--这样以来Spring 与 Ibatis就整合一块了-->




DAO注意
GroupingSqlMapDAOImpl中的代码片段

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

/*
SqlMapClientDaoSupport 是Spring对ibatis提供的支持类,跟整和Struts提供的ActionSupport类一个意思
*/
public class GroupingSqlMapDAOImpl implements GroupingSqlMapDAO//extends SqlMapClientDaoSupport 
{
    private pkmSqlMapClient sqlMapClient;

    public void setSqlMapClient(SqlMapClient sqlMapClient) {
        this.sqlMapClient = sqlMapClient;
    }

   public List getGroupingList() {
      try {
          return sqlMapClient.queryForList("Grouping.getGroupingList");

   // Grouping 是Grouping-SQL.xml中 的namespace ,  getGroupingList 是SQL的id

   } catch (Exception e) {

           throw makeException(e);

       }

   }
}


在Grouping-SQL.xml中

<!--resultMap,resultClass,parameterClass都可以是除了JavaBean对象以外的其他类型,例如java.util.HashMap,java.lang.String等等-->

<sqlMap namespace="Grouping">

   <typeAlias type="com.sds.acube.wp.pkm.blog.dmo.Grouping" alias="Grouping" />

   <resultMap id="grouping-list" class="Grouping">
   <!--class可以写 alias-->

      <result property="id" column="ID" />

      <result property="name" column="NAME" />

      <result property="intid" column="INTID" />

      <result property="description" column="DESCRIPTION" />

   </resultMap>

  <resultMap id="grouping-list-count" class="Grouping"      extends="grouping-list">

      <result property="groupingTeamManageCount" column="GROUPINGTEAMMANAGECOUNT" />

      <result property="groupingWebSiteCount" column="GROUPINGWEBSITECOUNT" />

   </resultMap>

   <insert id="insertGrouping" parameterClass="Grouping">
   <!--parameterClass是作为参数传递的类型,可以是一个JavaBean或者java.util.HashMap等一些类型-->

      <![CDATA[

        INSERT INTO bg_websitecategory(id, name, intid, description)

        VALUES(#id#, #name#, #intid#, #description#)

      ]]>

   </insert>

   <select id="getGroupingList" resultMap="grouping-list-count">
   <!--resultMap 在上面配置的属性和字段的映射关系,通过反射将属性映射到字段上-->

      <![CDATA[

            SELECT wc.id as id,

                   wc.name as name,

                   wc.intid as intid,

                   wc.description as description,

                   ( select count(1) 

                    FROM bg_teamwebsite_manage 

                    WHERE website_category_id = wc.id

                   ) as groupingTeamManageCount,

                   ( select count(1) 

                    FROM bg_website 

                    WHERE website_category_id = wc.id

                   ) as groupingWebSiteCount

            FROM bg_websitecategory wc 

            ORDER BY CAST(wc.intid as NUMBER(4,0)) ASC

      ]]>

      <!-- <include refid="selectListQuery"/> -->

   </select> 

   <insert id="updateGrouping" parameterClass="Grouping">

   </insert>

   <insert id="deleteGrouping" parameterClass="Grouping">

   </insert>

</sqlMap>


小结:
这次的项目大体的架子 prototype + Spring + Ibatis实现,前台View层 prototype将Spring Controller返回的ModelAndView对象所返回的数据(可以是HTML,XML)用于展示,中间bussiness层,Spring Controller 拦截请求,获取参数值,在通过Spring的IOC 将Ibatis整合,并且通过持久层的Ibatis与数据库交互,在这将系统的流程用一根绳子串了起来,刚好与系统的设计的方向是反过来的。
分享到:
评论

相关推荐

    spring mvc+ibatiS+mysql代码

    通过这个"Spring MVC+iBATIS+MySQL"的DEMO,你可以深入理解这三个组件如何协同工作,形成一个完整的Web应用系统。这个项目为你提供了实践这些技术的基础,你可以在此基础上扩展和优化,以适应更复杂的业务需求。

    Spring MVC+ibatis+oracle框架整合

    在"Spring MVC+ibatis+Oracle资源整合,实现简单的增删改查"的项目中,开发者可能已经创建了学生(stu)相关的实体类、Mapper接口、XML配置文件和DAO实现。例如,"stu"可能是学生表的名称,对应的实体类为Student,...

    spring mvc+ibatis+spring2.5注解

    在实际项目中,"springdemo3" 这个文件可能包含了一个简单的 Spring MVC + iBatis + Spring 2.5 注解的应用示例,其中包括配置文件(如 applicationContext.xml 和 servlet-context.xml)、Controller 类、Service ...

    spring MVC + Ibatis

    - 首先,需要在项目中引入 Spring MVC 和 iBatis 相关的依赖库。 - 创建 iBatis 的配置文件(如:mybatis-config.xml),配置数据源、事务管理器以及 SqlSessionFactory。 - 在 Spring 的配置文件(如:...

    spring mvc+ibatis+mysql+easyui简单demo

    在Spring MVC + iBATIS的应用中,MySQL作为数据存储,存储应用程序的各种数据。开发者可以使用SQL语句来创建、读取、更新和删除数据库中的记录。Spring JDBC或iBATIS可以与MySQL进行交互,提供数据的CRUD操作。 ...

    Spring.net + iBatis.net + asp.net MVC 整合文档

    关于Spring.net + iBatis.net + asp.net MVC 整合的文档,值!

    spring mvc+ibatis+spring注解

    Spring MVC、iBatis 和 Spring 注解是Java开发中常用的技术栈,它们分别负责Web层、数据访问层和依赖注入及配置。这篇文章将详细介绍这三个组件的结合使用以及相关的知识点。 **Spring MVC** Spring MVC 是 Spring ...

    struts2+spring3+ibatis项目整合案例

    在这个“struts2+spring3+ibatis项目整合案例”中,我们将深入探讨这三个框架如何相互配合,实现项目的集成。 Struts2作为MVC(Model-View-Controller)架构的实现,主要负责处理用户请求,控制应用的流程。它提供...

    搭建spring mvc+spring+ibatis所需所有jar包

    在构建Java Web应用程序时,Spring MVC、Spring和iBatis是三个非常重要的框架。Spring MVC作为Spring框架的一部分,主要用于处理Web请求,Spring则提供全面的依赖注入和面向切面编程功能,而iBatis则是一个优秀的...

    spring mvc + ibatis + Oracle + ajax 轻量级架构搭建及详解

    在本项目中,我们探讨的是如何使用Spring MVC、iBatis、Oracle数据库以及Ajax技术构建一个轻量级的Web应用程序架构。Spring MVC是Spring框架的一部分,主要负责处理HTTP请求和控制应用程序的流程;iBatis则是一个SQL...

    spring mvc+ibatis 框架 简单demo

    在IT行业中,Spring MVC和iBatis是两个非常流行的开源框架,它们被广泛应用于构建Java Web应用程序。Spring MVC作为Spring框架的一部分,负责处理HTTP请求和响应,而iBatis则是一个轻量级的持久层框架,它简化了...

    spring MVC+ibatis+ehcache开发包集合

    自己项目的开发包集合,其中包括:缓存处理ehcache相关jar,spring MVC4.0 jar,ehcache依赖jar,以及其他jar(图像处理thumbnailator-0.4.2),包虽然不是很新但可用。实际使用时找包较为麻烦,现在整理出来,希望...

    spring mvc+ibatis+dwr实现dispatchservlet

    Spring MVC、iBATIS(现在称为MyBatis)和Direct Web Remoting (DWR) 是三个常用的Java框架,它们各自在不同的层面上发挥着作用,共同为开发高质量的Web应用提供支持。本文将深入探讨如何使用这些技术实现...

    spring mvc+ibatis+oracle单表增删改(有包)

    在本项目中,我们主要探讨的是如何利用Spring MVC、iBATIS和Oracle数据库来实现一个基本的单表操作,包括增、删、改等常见功能。Spring MVC是Spring框架的一个模块,专门处理Web应用程序的模型-视图-控制器(MVC)...

    struts2+spring+Ibatis框架包

    Struts2、Spring和iBatis是Java Web开发中三个非常重要的开源框架,它们共同构建了一个灵活、可扩展且高效的应用程序开发环境。这个“struts2+spring+iBatis框架包”集成了这三个框架,使得开发者能够快速构建基于...

    Spring MVC+Hibernate&Ibatis学习 例子 教程

    在"spring_MVC_study"这个压缩包中,很可能是包含了一系列的示例代码和教程文档,用于指导学习者如何在实际项目中结合使用Spring MVC、Hibernate和iBatis。这些示例可能涵盖了从基本的CRUD操作到复杂的业务流程,...

    struts2+spring+ibatis+mysql

    在"Struts2+Spring+Ibatis+MySQL"的架构中,MySQL作为数据存储后端,与Ibatis配合,处理应用程序的数据交互。 5. **AOP日志管理与异常捕获**:在Spring框架中,可以利用AOP实现全局的日志管理和异常捕获。通过定义...

    spring3mvc+ibatis+demo

    通过这个项目,你可以深入理解Spring MVC和iBatis的集成过程,以及如何在实际项目中运用它们。这将对你的Java Web开发技能有显著提升,同时也能让你更好地理解和掌握MVC模式以及数据访问的最佳实践。

    spring-mvc+iBatis:maven

    Spring MVC 和 iBatis 是两个在 Java Web 开发中广泛使用的框架。Spring MVC 作为 Model-View-Controller 模式的实现,负责处理用户请求并返回响应,而 iBatis 则是一个轻量级的持久层框架,它简化了 SQL 的操作。在...

Global site tag (gtag.js) - Google Analytics