Spring4+SpringMVC+MyBatis整合思路

SSM整合——基于 IDEA Maven项目的 Spring + SpringMVC + MyBatis MVC架构整合 IDEA 下 Maven 的 SSM(Spring + SpringMVC + MyBatis)MVC 架构的整合 阅读详情
本文主要简单讲解框架整合的思路。

 

1、Spring框架的搭建

这个很简单,只需要web容器中注册org.springframework.web.context.ContextLoaderListener,并指定spring加载配置文件,那么spring容器搭建完成。(当然org.springframework的核心jar包需要引入)

当然为了更加易用支持J2EE应用,一般我们还会加上如下:

Spring监听HTTP请求事件:org.springframework.web.context.request.RequestContextListener

<!-- spring配置文件开始 -->
 <context-param>
  <param-name>contextConfigLocation</param-name><!-- spring配置文件,请根据需要选取 -->
  <param-value>classpath*:webconfig/service-all.xml</param-value>
 </context-param>
 <listener><!-- Spring负责监听web容器启动和关闭的事件 --><!-- Spring ApplicationContext载入 -->
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <listener><!-- Spring监听HTTP请求事件 -->
  <!-- 使spring支持request与session的scope,如: -->
  <!-- <bean id="loginAction" class="com.foo.LoginAction" scope="request"/> -->
  <!-- 使用: -->
  <!-- 1、注解获取:@Autowired HttpServletRequest request; -->
  <!-- 2、java代码:HttpServletRequest request = 
  ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); -->
  <!-- 3、直接在参数中传递:public String sayHi(HttpServletRequest request) -->
  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
 </listener>
 <listener><!-- Spring 刷新Introspector防止内存泄露 -->
  <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
 </listener>
 <filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
  <init-param>
   <param-name>forceEncoding</param-name>
   <param-value>false</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 <!-- spring配置文件结束 -->

 

2、Spring MVC的搭建

首先我们知道Spring MVC的核心是org.springframework.web.servlet.DispatcherServlet,所以web容器中少不了它的注册。(当然org.springframework的web、mvc包及其依赖jar包需要引入)

<!-- spring mvc配置开始 -->
 <servlet>
  <servlet-name>Spring-MVC</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath*:spring/spring-mvc.xml</param-value><!-- spring mvc配置文件 -->
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>Spring-MVC</servlet-name>
  <url-pattern>*.do</url-pattern>
 </servlet-mapping>
 <!-- spring mvc配置结束 -->

 

同时为了更好使用MVC,spring-mvc.xml需要配置以下:

1)(可选)多部分请求解析器(MultipartResolver)配置,与上传文件有关 需要类库commons-io、commons-fileupload

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <property name="defaultEncoding" value="utf-8"></property><!-- 默认编码-->
  <property name="maxUploadSize" value="104857600"></property><!-- 文件大小最大值-->
  <property name="maxInMemorySize" value="40960"></property><!-- 内存中的最大值-->
 </bean>

 

2)(可选)本地化(LocaleResolver)配置

3)(可选)主题解析器(ThemeResolver)配置 

4)(必选)处理器映射器(HandlerMapping)配置,可以配置多个,一般采用RequestMappingHandlerMapping或者自定义

这里我们自定义了一个处理器映射器,继承重写RequestMappingHandlerMapping,支持@RequestMapping无需任何path参数自动装载类名或方法作为url路径匹配。

<bean id="handlerMapping" 
  class="io.flysium.framework.web.servlet.mvc.method.annotation.CustomHandlerMapping">
  <property name="order" value="-1" />
 </bean>

 

CustomHandlerMapping实现:

@Override
 protected RequestMappingInfo getMappingForMethod(Method method, Class handlerType) {
  RequestMappingInfo info = createRequestMappingInfoDefault(method);
  if (info != null) {
   RequestMappingInfo typeInfo = createRequestMappingInfoDefault(handlerType);
   if (typeInfo != null)
    info = typeInfo.combine(info);
  }
  return info;
 }
 private RequestMappingInfo createRequestMappingInfoDefault(AnnotatedElement element) {
  RequestMapping requestMapping = AnnotatedElementUtils.findMergedAnnotation(element,
    RequestMapping.class);
  RequestCondition condition = (element instanceof Class)
    ? getCustomTypeCondition((Class) element)
    : getCustomMethodCondition((Method) element);
  /**
  * 以类名和方法名映射请求,参照@RequestMapping
  * 默认不需要添加任何参数(如:/className/methodName.do)
  */
  String defaultName = (element instanceof Class)
    ? ((Class) element).getSimpleName()
    : ((Method) element).getName();
  return requestMapping == null
    ? null
    : createRequestMappingInfo(requestMapping, condition, defaultName);
 }
 protected RequestMappingInfo createRequestMappingInfo(RequestMapping annotation,
   RequestCondition<?> customCondition, String defaultName) {
  String[] patterns = resolveEmbeddedValuesInPatterns(annotation.value());
  if (patterns != null && (patterns.length == 0)) {
   patterns = new String[]{defaultName};
  }
  return new RequestMappingInfo(
    new PatternsRequestCondition(patterns, getUrlPathHelper(), getPathMatcher(),
      this.useSuffixPatternMatch, this.useTrailingSlashMatch,
      this.fileExtensions),
    new RequestMethodsRequestCondition(annotation.method()),
    new ParamsRequestCondition(annotation.params()),
    new HeadersRequestCondition(annotation.headers()),
    new ConsumesRequestCondition(annotation.consumes(), annotation.headers()),
    new ProducesRequestCondition(annotation.produces(), annotation.headers(),
      this.contentNegotiationManager),
    customCondition);
 }

 

5)(必选)处理器适配器(HandlerAdapter)配置,可以配置多个,主要是配置messageConverters,其主要作用是映射前台传参与handler处理方法参数。一般扩展RequestMappingHandlerAdapter,或者自定义。如果我们需要json请求的处理,这里必须扩展。同时我们需要注意的是日期格式的转换。

另外Spring 4.2新特性,加之注解会自动注入@ControllerAdvice,可以定义RequestBodyAdvice、ResponseBodyAdvice,可以更方便地在参数处理方面着手自定义。

<bean id="handlerAdapter"
 class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
 <property name="order" value="-1" />
 <property name="messageConverters">
  <list>
  <!-- <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" 
   /> -->
   <ref bean="mappingJacksonHttpMessageConverter" />
  </list>
 </property>
 <property name="webBindingInitializer">
  <bean
   class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
   <property name="conversionService">
    <!-- 针对普通请求(非application/json) 前台的日期字符串与后台的Java Date对象转化,
    此情况,应使用spring 
     mvc本身的内置日期处理 -->
    <!-- 可以在VO属性上加注解:@DateTimeFormat 需要类库joda-time -->
  <bean
  class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
  </bean>
   </property>
  </bean>
 </property>
</bean>
<!-- json请求(application/json)返回值Date转String,全局配置 -->
<bean name="jacksonObjectMapper"
 class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
 <property name="featuresToDisable">
  <array>
  <util:constant
static-field="com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS" />
  </array>
 </property>
 <!-- 如果想自定义,可以在VO属性上加注解:@JsonFormat(shape = JsonFormat.Shape.STRING, pattern 
  = Consts.DATE_PATTERN.DATE_PATTERN_OBLIQUE,timezone = "GMT+8") -->
 <property name="simpleDateFormat">
  <value>yyyy-MM-dd HH:mm:ss</value>
 </property>
</bean>
<!--避免IE执行Ajax时,返回JSON出现下载文件 -->
<!-- 自定义 -->
<bean id="mappingJacksonHttpMessageConverter"
 class="io.flysium.framework.http.converter.json.CustomJackson2HttpMessageConverter">
 <property name="objectMapper" ref="jacksonObjectMapper" />
 <property name="supportedMediaTypes">
  <list>
   <value>text/html;charset=UTF-8</value>
   <value>application/json;charset=UTF-8</value>
  </list>
 </property>
</bean>

 

6)(可选)处理器异常解析器(HandlerExceptionResolver)配置,可以配置多个,配置Controller异常抛出后,我们是怎么样处理的,一般需要日志或做反馈的可以自定义。

7)(可选)请求到视图名翻译器(RequestToViewNameTranslator)配置,RequestToViewNameTranslator可以在处理器返回的View为空时使用它根据Request获得viewName。

8)(可选)视图解析器(ViewResolver)配置,可以配置多个,定义跳转的文件的前后缀 ,视图模式配置,主要针对@Controller返回ModelAndView的视图路径解析,动给后面控制器的方法return的字符串 加上前缀和后缀,变成一个 可用的url地址 。

<bean id="viewResolver"
  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/" />
  <property name="suffix" value=".jsp" />
  <property name="viewClass"
   value="org.springframework.web.servlet.view.JstlView" />
 </bean>

 

最后给Controller加入组件扫描吧,这样减少xml配置,直接在Java代码中加入注解即可。

<!-- 自动扫描类包,将标志Spring注解的类自动转化为Bean,同时完成Bean的注入 -->
 <!-- 扫描控制器 -->
 <context:component-scan base-package="io.flysium" use-default-filters="false">
  <context:include-filter type="annotation" 
   expression="org.springframework.stereotype.Controller" />
  <context:include-filter type="annotation" 
   expression="org.springframework.web.bind.annotation.RestController" />
  <context:include-filter type="annotation" 
   expression="org.springframework.web.bind.annotation.ControllerAdvice" />
 </context:component-scan>

 

3、Mybatis整合

整合mybatis到Spring框架,我们需要mybatis的jar包,及mybatis-spring整合jar包。然后在Spring容器中注册配置org.mybatis.spring.SqlSessionFactoryBean(需要数据源,及指定Mybatis配置文件)及org.mybatis.spring.SqlSessionTemplate即可。

5.Spring+Mybatis+SpringMVC整合 前端时间搭建了一个关于新闻的后台,使用Restful风格,向前台提供json格式数据。 对于刚学习的时候会觉得整合三个框架是一件很难的事情,但是当自己都熟悉了之后再来整理下思路其实也没有那么难。 就是把三个模块整合运行起来,然后写上自己的业务逻辑就形成了一个项目。 今天把就思路整一下,加深自己的印象,首先谈一下这三个东西分别是什么。 spring  Spring是一个开源框架,Sprin 阅读详情

相关推荐

未隔离电源设备使用usb转串口调试导致串口模块爆炸烧坏事故记录

这个事就发生在前两天,我们公司的wifi模块被客户用到了咖啡机上,客户寄了一台整机给我们协助调试,还送了几包咖啡豆,本想着还能打个咖啡喝一喝的,但就在咖啡机刚寄过来第一天,就出事了。而这个事故的发生,竟然仅仅是因为同事接了个串口模块到电脑调试打印导致的。谁也想不到,这个3.3V的供电的wifi模块居然还有这么大的威力。直接将usb转TTL串口模块的转换芯片给爆开了,咖啡机也给弄坏了,据同事描述当时情况就只见到一片火光和一声巨响,状况比较惨烈,所幸的是笔记本电脑没有烧坏,但是直接给崩蓝屏了。 ...

fangye945a的博客 6190

SpringMVC的Handler初始化及获取

HandlerMethod类 |注册Handler InvocableHandlerMethod 对请求进行处理 WebDataBinderFactory HandlerMethodArgumentResolverComposite ServletInvocableHandlerMethod 处理返回值 HandlerMethodR...

weixin_34367845的博客 465

EPS+ArcGIS+CASS三剑客:等高线裁剪的完整工作流与避坑指南

本文详细介绍了EPS、ArcGIS和CASS三款软件在等高线裁剪中的协同工作流程与避坑指南。通过发挥各软件优势,解决数据完整性、拓扑准确性和流程可靠性等核心挑战,提升40%以上的工作效率。特别适合大型测绘项目中复杂地形的处理,涵盖数据准备、核心处理到后期优化的全流程。

weixin_30352645的博客 618

Spring4+Spring MVC+MyBatis整合思路

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34177064的博客 127

C++游戏开发实战:从零构建局域网联机对战系统(附完整代码解析)

本文详细介绍了如何使用C++开发局域网联机对战游戏系统,涵盖从环境搭建到实战代码解析的全过程。重点讲解了Winsock库的应用、Socket通信原理、服务端与客户端开发技巧,以及性能优化和安全防护方案,帮助开发者快速掌握C++游戏开发的核心技术。

weixin_42524945的博客 444

Python气象雷达数据处理实战:用PyCINRAD从基数据到PPI图的完整流程

本文详细介绍了使用PyCINRAD库处理气象雷达基数据并生成PPI图的完整流程,涵盖环境配置、数据读取、反射率与速度数据提取、可视化优化等关键步骤。通过实战案例演示如何从原始雷达数据到专业级PPI图像生成,为气象研究和业务应用提供高效解决方案。

yog99的博客 758

Spring mvc工作原理

需要解决的问题 Spring mvc按照MVC设计模式设计的框架,Model实体类传递给Controller,设置变量,返回给模板,渲染给客户端。 目标是简化开发流程,不需要大量重复的代码,不需要像servlet每个请求都要配置一个servlet,并需要手工管理request,response。以及DI,aop的介入,可以定制大量操作,比如HandlerMethodReturnValu

晚晴小筑 1023

PCL Alpha Shapes平面点云边界特征提取【2026最新版】

alpha shapes算法用于平面点云的边界特征提取。博客长期更新,本文最近一次更新时间为:2026年4月20日。

点云侠的博客 27万+

【Spring源码分析】35-Spring MVC设计原理

1、Spring MVC 请求处理流程概述 DispatcherServlet是SpringMVC 中的前端控制器(Front Controller),负责接Request并将Request委托特殊bean处理请求并呈现适当的响应。 Bean类型 描述 HandlerMapping 将请求映射到处理程序以及用于预处理和后处理的拦截器列表。映射基于某些标准...

通往神秘的道路的专栏 6921

AUTOSAR进阶图解==>AUTOSAR_SWS_ADCDriver

本文深入解析了AUTOSAR ADC Driver的架构设计和技术实现。主要内容包括:1)ADC Driver在AUTOSAR分层架构中的定位及核心功能;2)详细的模块架构设计,涵盖初始化管理、组转换管理、优先级处理等核心子组件;3)全面的配置模型说明,包括主配置类、通用配置、通道配置等关键数据结构;4)状态机机制和操作序列分析。通过分层设计和标准化接口,ADC Driver实现了硬件抽象和软件解耦,提供了良好的可移植性和可维护性。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 786

深度解读华为Limera:从舱内激光视觉融合看前融合技术的发展与演进

华为Limera激光雷达摄像头融合技术推动自动驾驶感知升级 华为推出的Limera创新性地将激光雷达与摄像头深度集成,采用共光路设计实现数据天然对齐,在小型障碍物识别等关键场景展现卓越性能。该产品代表了传感器前融合技术从分立走向共生的演进趋势,通过硬件级集成解决了多源异构数据融合难题。随着索尼堆叠式传感器等技术的出现,未来智能汽车感知系统将向高度集成的"超级传感器"方向发展,实现更精准的环境感知。Limera的发布标志着前融合技术从"可用"迈向"极致&quo

致力于lidar应用开发 395

spring没有整合最新的mybatis

需要的jar包 mybatis-3.0.6.jar mybatis-spring-1.0.2.jar 要点: 1.在spring中配置mybatis工厂类 2.在dao层使用spring注入的的工具bean对数据进行操作 整合时,可以有四种方式来使用mybatis进行数据处理。 spring中必须的配置。 spring的配置文件中加入以下内容 Xm...

iteye_8029的博客 152

STM32电机PID速度控制

2.3 STM32电机PID速度控制 之前的文章,完成了直流减速电机的PWM控制、电机测速。本篇文章,将实现电机的速度闭环控制。 在公众号:小白学移动机器人,发送:速度PID,即可获得本篇文章的STM32工程文件以及相关资料。 2.3.1 解决的问题 解决带编码器直流电机的速度闭环问题。 2.3.2 PID理论 将偏差的比例、积分、微分,通过线性组合构成控制量,用控制量对被控对象进行控制,这样的控制器称为PID控制器。在连续空间中,我们通常探讨模拟PID的控制原理,如图所示: 我们这里用电机速度控制为例,

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 6万+

mybatis jar包_Spring4+SpringMVC+MyBatis整合思路

本文主要简单讲解框架整合的思路。1、Spring框架的搭建这个很简单,只需要web容器中注册org.springframework.web.context.ContextLoaderListener,并指定spring加载配置文件,那么spring容器搭建完成。(当然org.springframework的核心jar包需要引入)当然为了更加易用支持J2EE应用,一般我们还会加上如下:Spring监...

weixin_39732534的博客 109

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java+springmvc+vo,Spring4+SpringMVC+MyBatis整合思路

本文主要简单讲解框架整合的思路。1、Spring框架的搭建这个很简单,只需要web容器中注册org.springframework.web.context.ContextLoaderListener,并指定spring加载配置文件,那么spring容器搭建完成。(当然org.springframework的核心jar包需要引入)当然为了更加易用支持J2EE应用,一般我们还会加上如下:Spring监...

weixin_42405705的博客 123

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

单因素方差分析详解:从原理到Matlab代码实战

数据统计分析中,判断不同条件下的观测差异是否显著,是实验设计与算法评估的基础问题。方差分析(ANOVA)正是一种将总波动分解为组间方差与组内方差、构造F统计量并与概率分布对照的统计推断工具。通过平方和分解与显著性水平判断,研究者可以把源于处理条件的影响与源于随机误差的波动区分开。借助Matlab,可以快速完成方差分析表计算、p值提取、多重比较等,在随机模拟实验、算法调参和不同策略对比中具有很强的实用价值,例如固定随机种子消除部分噪声后,用ANOVA评估多组结果的差异是否真实。从原理到代码,单因素方差分析的完

weixin_33851604的博客 293

史上最详细Spring+SpringMVC+Mybatis框架整合

文章目录SSM三大框架的整合搭建整合环境编写Spring框架编写SpringMVC框架Spring整合SpringMVC框架编写Mybatis框架Spring整合MyBatis框架Spring整合MyBatis框架配置事务总结 SSM三大框架的整合 搭建整合环境 1.整合说明:SSM整合有很多种方式,我们采用XML+注解的方式 2.整合思路: 先搭建整合的环境 先把Spring的配置搭建完成 使...

weixin_43949154的博客 2392

spring springmvc mybatis 整合思路 以及所需要的jar

Spring框架所需要准备的JAR包共10个,其中包括:4个核心模块JAR, AOP开发使用的JAR, JDBC和事务的JAR(其中核心容器依赖的commons-logging的JAR在MyBatis框架的lib包中已经包含,所以这里不必再加入),具体如下所示。要实现MyBatis与Spring的整合,很明显需要这两个框架的JAR包,但是只使用这两个框架中所提供的JAR包是不够的,还需要其他的JAR包来配合使用,整合时所需准备的JAR包具体如下。整合spring和mybatis所需的jar如下。

道友 1753

【SSM整合】SSM整合详细流程步骤,Spring整合SpringMVC,Spring整合MyBatis,c3p0数据库连接池使用,事务配置。

SSM整合 整合Spring、SpringMVC、MyBatis,搭建SSM环境,用于开发其他功能。 整合思路 搭建整合的环境,初始化环境 搭建Spring环境,配置完成并测试 再使用Spring整合SpringMVC框架,并测试 最后使用Spring整合MyBatis框架,并测试 整合方法:xml配置+注解的方式进行整合。 1. 搭建SSM环境 1.1 准备一个ssm数据库,并创建person表用于测试 CREATE DATEBASE ssm; USE ssm; SET FOREIGN_KEY_C

Java小皮孩 5227

Spring + SpringMVC + MyBatis 整合思路及配置

关于 SSM 框架的整合

鱼开饭的博客 1022

Spring之SSM整合流程详解(Spring+SpringMVC+MyBatis)

SSM(Spring + SpringMVC + MyBatis)是企业级Java开发的经典框架组合:Spring负责IoC容器和事务管理,SpringMVC处理Web请求,MyBatis简化数据库操作,掌握SSM整合是Java后端开发的必备技能。

aa_hdkf_vg的博客 1578

Spring+Springmvc+MyBatis整合

写在整合之前 现在刚进入公司,公司采用的是SSM框架,使用Maven搭建工程,之前自己学的是SSH,所以入门相对还可以,觉得不是太难,在进入公司这一周多的时间,自己觉得有以下几点很重要: 在公司里,框架他只是要求你了解,熟悉公司的框架,真正要用到的还是java基础的公司,因为最重要的是业务。 框架入门也不是太难,只是想深入了解就有点麻烦,很多原理和理论性的问题很难理解,得有一个宏观的概念。 在以后

Mr.Cheng先生 2110
上一篇: 探究Java虚拟机栈
下一篇: Java SSM框架基础面试题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值