本人不才,刚接触Ibatis不久,然后需要整和到项目中,下面是和Spring+Ibatis的实现,欢迎拍砖,撒花。。。
Web.xml中
#片段1:
那么必须有个AcubeFramework-servlet.xml文件,这是spring实现MVC的主配置文件(包含请求拦截[View],bean的管理[Control],与数据库之间的交互[Model]等等)
因为在这个项目中AcubeDispatcherServlet 继承了 DispatcherServlet 并且重写了init()方法,在init()web容器启动即调用,中做了一些与ContextLoaderListener相似的工作,与下面的代码片段达到的功能一致
AcubeFramework-servlet.xml 部分片断
在下面Pkm-context.xml中 (引入view.property,pkm-sqlmap.xml 和 pkm-blog-spring.xml)
jdbc.properties文件中的配置如下
在config/view.property 文件中配置如下
RegistBlognityGrouping是 在返回ModelAndView对象所定位的字符串
这样以来Spring完成了对view层分层封装
pkm-sqlmap.xml文件中 配置了与数据库交互的SQL文件通过pkmSqlMapClient来读取
pkm-blog-spring.xml文件 (配置view层面的URL mapping和bussiness功能 bean的依赖关系) 按模块可以拆分成多个配置文件
附加部分Java 代码方便理解
DAO注意
GroupingSqlMapDAOImpl中的代码片段
在Grouping-SQL.xml中
小结:
这次的项目大体的架子 prototype + Spring + Ibatis实现,前台View层 prototype将Spring Controller返回的ModelAndView对象所返回的数据(可以是HTML,XML)用于展示,中间bussiness层,Spring Controller 拦截请求,获取参数值,在通过Spring的IOC 将Ibatis整合,并且通过持久层的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"的DEMO,你可以深入理解这三个组件如何协同工作,形成一个完整的Web应用系统。这个项目为你提供了实践这些技术的基础,你可以在此基础上扩展和优化,以适应更复杂的业务需求。
在"Spring MVC+ibatis+Oracle资源整合,实现简单的增删改查"的项目中,开发者可能已经创建了学生(stu)相关的实体类、Mapper接口、XML配置文件和DAO实现。例如,"stu"可能是学生表的名称,对应的实体类为Student,...
在实际项目中,"springdemo3" 这个文件可能包含了一个简单的 Spring MVC + iBatis + Spring 2.5 注解的应用示例,其中包括配置文件(如 applicationContext.xml 和 servlet-context.xml)、Controller 类、Service ...
- 首先,需要在项目中引入 Spring MVC 和 iBatis 相关的依赖库。 - 创建 iBatis 的配置文件(如:mybatis-config.xml),配置数据源、事务管理器以及 SqlSessionFactory。 - 在 Spring 的配置文件(如:...
在Spring MVC + iBATIS的应用中,MySQL作为数据存储,存储应用程序的各种数据。开发者可以使用SQL语句来创建、读取、更新和删除数据库中的记录。Spring JDBC或iBATIS可以与MySQL进行交互,提供数据的CRUD操作。 ...
关于Spring.net + iBatis.net + asp.net MVC 整合的文档,值!
Spring MVC、iBatis 和 Spring 注解是Java开发中常用的技术栈,它们分别负责Web层、数据访问层和依赖注入及配置。这篇文章将详细介绍这三个组件的结合使用以及相关的知识点。 **Spring MVC** Spring MVC 是 Spring ...
在这个“struts2+spring3+ibatis项目整合案例”中,我们将深入探讨这三个框架如何相互配合,实现项目的集成。 Struts2作为MVC(Model-View-Controller)架构的实现,主要负责处理用户请求,控制应用的流程。它提供...
在构建Java Web应用程序时,Spring MVC、Spring和iBatis是三个非常重要的框架。Spring MVC作为Spring框架的一部分,主要用于处理Web请求,Spring则提供全面的依赖注入和面向切面编程功能,而iBatis则是一个优秀的...
在本项目中,我们探讨的是如何使用Spring MVC、iBatis、Oracle数据库以及Ajax技术构建一个轻量级的Web应用程序架构。Spring MVC是Spring框架的一部分,主要负责处理HTTP请求和控制应用程序的流程;iBatis则是一个SQL...
在IT行业中,Spring MVC和iBatis是两个非常流行的开源框架,它们被广泛应用于构建Java Web应用程序。Spring MVC作为Spring框架的一部分,负责处理HTTP请求和响应,而iBatis则是一个轻量级的持久层框架,它简化了...
自己项目的开发包集合,其中包括:缓存处理ehcache相关jar,spring MVC4.0 jar,ehcache依赖jar,以及其他jar(图像处理thumbnailator-0.4.2),包虽然不是很新但可用。实际使用时找包较为麻烦,现在整理出来,希望...
Spring MVC、iBATIS(现在称为MyBatis)和Direct Web Remoting (DWR) 是三个常用的Java框架,它们各自在不同的层面上发挥着作用,共同为开发高质量的Web应用提供支持。本文将深入探讨如何使用这些技术实现...
在本项目中,我们主要探讨的是如何利用Spring MVC、iBATIS和Oracle数据库来实现一个基本的单表操作,包括增、删、改等常见功能。Spring MVC是Spring框架的一个模块,专门处理Web应用程序的模型-视图-控制器(MVC)...
Struts2、Spring和iBatis是Java Web开发中三个非常重要的开源框架,它们共同构建了一个灵活、可扩展且高效的应用程序开发环境。这个“struts2+spring+iBatis框架包”集成了这三个框架,使得开发者能够快速构建基于...
在"spring_MVC_study"这个压缩包中,很可能是包含了一系列的示例代码和教程文档,用于指导学习者如何在实际项目中结合使用Spring MVC、Hibernate和iBatis。这些示例可能涵盖了从基本的CRUD操作到复杂的业务流程,...
在"Struts2+Spring+Ibatis+MySQL"的架构中,MySQL作为数据存储后端,与Ibatis配合,处理应用程序的数据交互。 5. **AOP日志管理与异常捕获**:在Spring框架中,可以利用AOP实现全局的日志管理和异常捕获。通过定义...
通过这个项目,你可以深入理解Spring MVC和iBatis的集成过程,以及如何在实际项目中运用它们。这将对你的Java Web开发技能有显著提升,同时也能让你更好地理解和掌握MVC模式以及数据访问的最佳实践。
Spring MVC 和 iBatis 是两个在 Java Web 开发中广泛使用的框架。Spring MVC 作为 Model-View-Controller 模式的实现,负责处理用户请求并返回响应,而 iBatis 则是一个轻量级的持久层框架,它简化了 SQL 的操作。在...