【思维导图】mybatis-12、与spring整合
Spring精品教程资料:3.MyBatis与Spring的整合

完成时间:20分钟
7/33
学员操作—根据名称查询供应商信息 练习 需求说明
在上一练习基础上增加按照供应商名称模糊查询供应商 信息的功能
要求:直接注入SqlSessionTemplate实现
MapperFactoryBean
MapperScannerConfigurer递归扫描基准包下所有接口,若它们 在SQL映射文件中定义过,则动态注册为MapperFactoryBean, 如此即可批量产生映射器实现类
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
分析 配置数据源 配置SqlSessionFactoryBean
使用SqlSessionTemplate实现数据库的操作
编写业务逻辑代码并测试
演示示例1:实现Spring对MyBatis的整合
6/33
学员操作—实现供应商表的查询操作 练习 需求说明
在超市订单系统中实现供应商表的查询操作
<property name="basePackage" value="cn.smbms.dao" />
</bean>
指定扫描的基准包
演示示例3:使用MapperScannerConfigurer注入映射器
11/33
小结
MapperScannerConfigurer 与@Autowired注解或@Resource注解配合 使用,自动创建映射器实现并注入给业务组件,能够最大限度地减 少DAO组件与业务组件的编码和配置工作
MyBatis思维导图

MyBatis思维导图1、初识框架技术2、搭建MyBatis环境3、掌握MyBatis的核⼼API4、掌握MyBatis的核⼼配置⽂件:主要⽤于配置数据库连接和MyBatis运⾏时所需的各种特性5、掌握SQL映射⽂件(或者使⽤⾃动⽣成SQL映射⽂件的插件)6、掌握MyBatis缓存7、Dao上级操作8、掌握动态SQL9、掌握MyBatis框架的优缺点和其使⽤场合--------------------------------------------------------------------------------------------------------------------------------------知识点详情-------------------------------------------------------------1、初识框架技术 1.1什么是框架 框架(Framework)是⼀个提供了可重⽤的公共结构的半成品,它成为构建新的应⽤程序提供了极⼤的便利,更提供了可重⽤的设计; 1.2当前的主流框架 1.2.1 Struts2: Struts2以Webwork设计思想为核⼼,吸收了Struts框架的部分优点,提供了⼀个更加整洁的基于MVC设计模式实现的Web应⽤程序框架。
它引⼊了⼏个新的框架特性:从逻辑中分离出横切关注点的拦截器,减少或者消除配置⽂件,贯穿整个框架的强⼤表达式语⾔,⽀持可重⽤的标签API等。
Struts2充分利⽤了从其他MVC框架学到的经验和教训,使整个框架更加清晰、灵活(引⼊了拦截器)。
1.2.2 Hibernate: Hibernate是⼀个优秀的持久化框架(ORM),负责简化将对象数据保存到数据库中,或从数据库中读取数据并封装到对象的⼯作。
Hibernate通过简单配置和编码即可替代JDBC繁琐的程序代码。
1.2.3Spring: Spring是⼀个开源框架。
16.mybatis和spring整合-SqlSessionFactory配置

log4j.rootCategory=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
yout=org.apache.log4j.PatternLayout
yout.ConversionPattern=[%5p] [%t] %c{2}:%L - %m%n
1、SqlSessionFactory配置:
在applicationContext.xml配置SqlSessionFactory和数据源。
mybatis和spring整合
整合思路:
需要spring通过单例的方式管理SqlSessionFactory。
spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(Spring和mybatis整合自动完成)
持久层的mapper、dao都需要由spring进行管理。
ername=root
jdbc.password=753951
dbcp.maxIdle=10
dbcp.maxTotal=20
jdbc.defaultAutoCommit=true
-->
<!-- 加载数据源properties配置文件 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- Connection Pooling Info -->
<property name="maxIdle" value="${dbcp.maxIdle}" />
SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)

SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。
之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些。
以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下。
这次,先说说三大框架整合过程。
个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助。
不过,如果用都不会,谈思想就变成纸上谈兵了!!!先技术,再思想。
实践出真知。
(可通过图片水印查看博客地址)1、基本概念1.1、SpringSpring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。
它是为了解决企业应用开发的复杂性而创建的。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅限于服务器端的开发。
从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
1.2、SpringMVCSpring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。
Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
1.3、MyBatisMyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
mybatis整合spring

mybatis整合springmybatis整合spring根据官方的说法,在ibatis3,也就是mybatis3问世之前,spring3的开发工作就已经完成了,所以spring3中还是没有对mybatis3的支持。
因此由mybatis社区自己开发了一个mybatis-spring用来满足mybatis用户整合spring的需求。
下面就将通过mybatis-spring来整合mybatis跟spring的用法做一个简单的介绍。
mapperfactorybean首先,我们需要从mybatis官网上下载mybatis-spring的jar包添加到我们项目的类路径下,当然也需要添加mybatis的相关jar包和spring的相关jar包。
我们知道在mybatis的所有操作都是基于一个sqlsession的,而sqlsession是由sqlsessionfactory来产生的,sqlsessionfactory又是由sqlsessionfactorybuilder来生成的。
但是mybatis-spring是基于sqlsessionfactorybean的。
在使用mybatis-spring的时候,我们也需要sqlsession,而且这个sqlsession是内嵌在程序中的,一般不需要我们直接访问。
sqlsession也是由sqlsessionfactory来产生的,但是mybatis-spring给我们封装了一个sqlsessionfactorybean,在这个bean里面还是通过sqlsessionfactorybuilder来建立对应的sqlsessionfactory,进而获取到对应的sqlsession。
通过sqlsessionfactorybean我们可以通过对其指定一些属性来提供mybatis的一些配置信息。
所以接下来我们需要在spring的applicationcontext配置文件中定义一个sqlsessionfactorybean。
mybatis与spring的整合配置说明

mybatis是ibatis的升级版,spring也有自带mybatis的orm。
所以,搭建ibatis的框架也会有多种方式(我这里mybatis是3.0的,ibatis是2.3的,spring是3.0的,数据库是mysql)。
下面介绍3中方式1,只是用mybatis3。
2,使用mybatis3+spring3(使用mybatis的SqlSessionFactory )。
3,使用ibatis2.3+spring(使用spring自带的ibatis)spring的orm包中只有ibatis,没有mybatis。
而mybatis和ibatis还是有些区别的,比如配置文件属性不同。
第一种方式(只使用mybatis):1)jar包:cglib-2.2.jarasm-3.1.jarmysql-connector-java-3.1.13.jarmybatis-3.0.5.jarjunit.jar2)mybatis配置文件:[html]view plaincopy1.<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//my//DTD Config 3.0//EN" "/dtd/mybatis-3-config.dtd">2.<configuration>3.<!-- 参数设置 -->4.<settings>5.<!-- 这个配置使全局的映射器启用或禁用缓存 -->6.<setting name="cacheEnabled"value="true"/>7.<!-- 全局启用或禁用延迟加载。
当禁用时,所有关联对象都会即时加载 -->8.<setting name="lazyLoadingEnabled"value="true"/>9.<!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。
第10章 MyBatis与Spring的整合[40页]
具体来说,业务逻辑对象依赖基于MyBatis技术实现的DAO对象,其核心是获取 SqlSession实例。
第10章 MyBatis与Spring 的整合
Spring框架对MyBatis框架的整合思路
主讲内容
Speech content
Spring框架整合MyBatis框架的准备工作 实现Spring对MyBatis的框架整合 注入Mapper接口方式的开发整合 测试事务
Spring配置补充
Spring框架对MyBatis框架的整合思路
演示示例:实现Spring对MyBatis的整合
11
准备所需JAR包
要实现MyBatis与Spring的整合,很明显需要这两个框架的JAR包, 但是只使用这两个框架中所提供的JAR包是不够的,还需要其他的JAR包 来配合使用,整合时所需准备的JAR包具体如下。
1.Spring框架所需的JAR包
• aopalliance-1.0.jar。 • aspectjweaver-1.8.10.jar。 • spring-aop-3.2.18.RELEASE.jar。 • spring-aspects-3.2.18.RELEASE.jar。 • spring-beans-3.2.18.RELEASE.jar。 • spring-context-3.2.18.RELEASE.jar。 • spring-core-3.2.18.RELEASE.jar。 • spring-expression-3.2.18.RELEASE.jar。 • spring-jdbc-3.2.18.RELEASE.jar。 • spring-tx-3.2.18.RELEASE.jar。
Spring和MyBatis的整合
Spring和MyBatis的整合1. Spring和各个框架的整合Spring⽬前是JavaWeb开发中最终的框架,提供⼀站式服务,可以其他各个框架整合集成Spring整合⽅案1.1. SSHssh是早期的⼀种整合⽅案Struts2 : Web层框架Spring :容器框架Hibernate :持久层框架1.2. SSM主流的项⽬架构的三⼤框架(相对其他框架⽽⾔,最优秀)SpringMVC : spring⾃⼰家的 Web层框架,spring的⼀个模块Spring :容器框架MyBatis :持久层框架2. Spring与MyBatis整合2.1. 集成思路实际开发,使⽤Maven项⽬,直接引⼊项项⽬在Maven仓库中的坐标即可学习阶段:⼿动导⼊jar包,从零开始集成(巩固基础知识)2.2. 创建java项⽬准备集成相关jar包完成项⽬层与层之间spring对象的创建和依赖关系的维护package cn.sxt.pojo;public class User {private Integer id;private String name;private String password;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", password=" + password + ", age=" + age + "]"; }public User(Integer id, String name, String password, Integer age) {super();this.id = id; = name;this.password = password;this.age = age;}public User() {super();// TODO Auto-generated constructor stub}}package cn.sxt.mapper;import java.util.List;import er;public interface UserMapper {int insert(User user);int deleteByPrimaryKey(Integer id);int updateByPrimaryKey(User user);User selectByPrimaryKey(Integer id);List<User> selectList();}<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="erMapper"><insert id="insert" parameterType="User"keyColumn="id"keyProperty="id"useGeneratedKeys="true">insert into user (name,password,age)values(#{name},#{password},#{age}) </insert><!-- 单⾏查询<select resultType ="">查询功能的标签resultType : 返回结果的数据类型,和接⼝对应⽅法的返回类型必须⼀致--><select id="selectByPrimaryKey" parameterType="Integer" resultType="User"><!-- #{对象属性} ,主键理论上任何值都可以 #{abc},#{xxx},可以不⽤对象属性-->select * from user where id = #{id}</select><!-- 多⾏查询⽆论单⾏或者多⾏查询,返回的数据类型都是对应 pojo 对应的对象类型--><select id="selectList" resultType="User">select * from user</select><!-- 删除操作 --><delete id="deleteByPrimaryKey" parameterType="Integer">delete from user where id = #{id}</delete><!-- 修改操作 --><update id="updateByPrimaryKey" parameterType="User"><!-- 固定语义的sql语句 -->update user set name = #{name},password = #{password},age = #{age} where id = #{id} </update></mapper>package cn.sxt.service;import java.util.List;import er;public interface UserService {int insert(User user);int deleteByPrimaryKey(Integer id);int updateByPrimaryKey(User user);User selectByPrimaryKey(Integer id);List<User> selectList();}package cn.sxt.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import erMapper;import er;import erService;@Servicepublic class UserServiceImpl implements UserService {/** 问题1 : UserMapper是接⼝,如何创建对象?* 答:使⽤MyBatis的SqlSession 会话对象。
Mybatis和spring整合
Mybatis和spring整合mybatis和spring整合也就是把两者的优点集合到⼀起下⾯我们看下配置步骤1. 导⼊jar1. 整合spring和mybatis需要mybatis-spring.jar我⽤的是1.2.0版本2. 整合需要⽤到spring数据源和事物⽀持,需要spring-jdbc和spring-tx的包3. spring中使⽤具体的数据源实现,此次需要dbcp,commons-dbcp及commons-pool包4.5. 导⼊后如图所⽰6.7. spring官⽹下载地址:https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework/spring/4.3.2.RELEASE8. 另⼀个地址:http://repo.spring.io/release/org/springframework/spring/9. mybatis官⽹下载地址:https:///mybatis/mybatis-3/releases2.3. 搭建好mybatis框架后确保mybatis环境搭建没有错误,在此基础上进⾏spring融合1. 修改配置⽂件1. ⾸先需要把mybatis中数据库连接和映射mapper⽂件的部分删除如下2. <properties resource="database.properties"/>3. <environments default="dpCommodity"><environment id="dpCommodity"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${user}"/><property name="password" value="${pwd}"/></dataSource></environment></environments><mappers><mapper resource="cn/dao/CommodityMapper.xml"/></mappers>2. 删除之后新建spring配置⽂件导⼊database.properties⽂件<!-- 引⼊properties⽂件 --><bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location" value="classpath:database.properties"/></bean>之后配置数据源其中⼤括号⾥⾯的名称对应 database.properties⽂件中的名称3. <!-- 配置数据源 --><bean id="dataSource" class="mons.dbcp.BasicDataSource"><property name="driverClassName" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${user}"/><property name="password" value="${pwd}"/></bean>database⽂件内容如下:4. 配置sqlSessionFactory<!-- 配置sqlSessionFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 引⽤数据源组件 --><property name="dataSource" ref="dataSource"/><!-- 引⽤mybatis配置⽂件中的配置 --><property name="configLocation" value="classpath:mybatis-config.xml"/><!-- 配置SQL映射⽂件信息 --><property name="mapperLocations"><list><value>classpath:cn/dao/**/*.xml</value></list></property></bean> 其他配置 <!-- 配置SQLsessionTemplate --><bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/></bean><!-- 配置dao组件并注⼊SQLsession session为实现类中的属性 class中的路径为所需要使⽤接⼝的实现类路径--><bean id="workinggMapper" class="cn.dao.impl.WorkinggMapperImpl"><property name="session" ref="sqlSessionTemplate"/></bean><!-- 配置业务bean并且注⼊ wM为业务bean中的属性 class中的路径为所需要使⽤接⼝的业务实现bean路径 --><bean id="workinggService" class="cn.service.impl.WorkinggServiceImpl"><property name="wM" ref="workinggMapper"/></bean>1. 测试1. 测试类代码如下public class Test {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");WorkinggService cs = (WorkinggServiceImpl)ctx.getBean("workinggService");List<Workingg> cList = cs.allWorking();for (Workingg w : cList) {System.out.println(w.getTitle());}}}⾃动⽣成映射器实现类1. 其实还有另外⼀种配置⽅法,因为上⾯的配置⽅法如果我换⼀个接⼝,那么⼜要修改配置⽂件那么有没有好点的⽅法呢 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- basePackage属性指定了扫描的基准包,MapperScannerConfigurer将递归扫描基准包(包括下⾯的⼦包)下所有接⼝如果他们在sql映射⽂件中定义过,则将他们动态注册为mapperFactoryBean,这样既可批量产⽣映射器实现类--><property name="basePackage" value="cn.dao"/></bean>通过上⾯这⼀步就可以让它⾃动⽣成映射器实现类,其中basePackage属性中可以包含多个包名,多个包名直接使⽤逗号或分号隔开2. 注意如果sqlSessionFactory配置了多个那么⾃动装配则⽆法进⾏,需要指定 sqlSessionFactory如下<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- basePackage属性指定了扫描的基准包,MapperScannerConfigurer将递归扫描基准包(包括下⾯的⼦包)下所有接⼝如果他们在sql映射⽂件中定义过,则将他们动态注册为mapperFactoryBean,这样既可批量产⽣映射器实现类--><property name="basePackage" value="cn.dao"/><!-- 注意此属性时name,⽽不是sqlSessionFactory,为其赋值使⽤的是 value --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean>如上则可以⾃动⽣成映射器实现类<!-- 定义业务bean --><bean id="workinggService" class="cn.service.impl.WorkinggServiceImpl"><property name="wM" ref="workinggMapper"/></bean>⾃动⽣成映射器实现类的名字默认为,接⼝名第⼀个单词⼩写后⾯的不变如接⼝名:WorkinggMapper 默认名称:workinggMapper3. 注意:SQL映射⽂件中必须遵循以下命名规则1. 映射命名空间和映射器接⼝的名称相同2. 映射元素的id和映射器接⼝的⽅法相同3.使⽤注解定义业务bean 通过上⾯的改造,可不⽤⼿动⽣成映射器实现类了但是去依然要写业务bean,这时候就有了注解当需要某种业务bean时执⾏添加注解即可 如下吧之前⽣成业务bean的代码替换成 <!-- ⾃动扫描cn下⾯所包(包括⼦包)下⾯所有类 --><context:component-scan base-package="cn"/>再在业务bean中写两个注释即可如下业务bean继承SqlSessionDaoSupport类 修改之前的业务bean如下package cn.service.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.stereotype.Service;import cn.dao.WorkinggMapper;import cn.pojo.Workingg;import cn.service.WorkinggService;//加上这⾏注释扫描的时候则会⾃动⽣成名为workinggService的业务bean@Service("workinggService")public class WorkinggServiceImpl implements WorkinggService {//扫描时会⾃动注⼊ WorkinggMapper@ResourceWorkinggMapper wM;public WorkinggMapper getwM() {return wM;}public void setwM(WorkinggMapper wM) {this.wM = wM;}@Overridepublic int screenTitle(String title) {return wM.screenTitle(title);}@Overridepublic Workingg screenId(Integer id) {// TODO Auto-generated method stubreturn wM.screenId(id);}@Overridepublic List<Workingg> allWorking() {// TODO Auto-generated method stubreturn wM.allWorking();}@Overridepublic int count() {// TODO Auto-generated method stubreturn wM.count();}@Overridepublic int addWorking(Workingg workingg) {// TODO Auto-generated method stubreturn wM.addWorking(workingg);}@Overridepublic int del(Integer id) {// TODO Auto-generated method stubreturn wM.del(id);}@Overridepublic int modify(Workingg workingg) {// TODO Auto-generated method stubreturn wM.modify(workingg);}public static WorkinggService getWorkinggService() {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");WorkinggService wService = (WorkinggServiceImpl)ctx.getBean("WorkinggService");return wService;}}继承之后dao的实现类就没什么⽤了,因为业务类以及不依赖dao的实现类了,继承后代码如下package cn.service.impl;import java.util.List;import org.mybatis.spring.support.SqlSessionDaoSupport;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.stereotype.Service;import cn.dao.WorkinggMapper;import cn.pojo.Workingg;import cn.service.WorkinggService;public class WorkinggServiceImpl extends SqlSessionDaoSupport implements WorkinggService {@Overridepublic int screenTitle(String title) {return super.getSqlSession().getMapper(WorkinggMapper.class).screenTitle(title);}@Overridepublic Workingg screenId(Integer id) {// TODO Auto-generated method stubreturn super.getSqlSession().getMapper(WorkinggMapper.class).screenId(id);}@Overridepublic List<Workingg> allWorking() {// TODO Auto-generated method stubreturn super.getSqlSession().getMapper(WorkinggMapper.class).allWorking();}@Overridepublic int count() {// TODO Auto-generated method stubreturn super.getSqlSession().getMapper(WorkinggMapper.class).count();}@Overridepublic int addWorking(Workingg workingg) {// TODO Auto-generated method stubreturn super.getSqlSession().getMapper(WorkinggMapper.class).addWorking(workingg);}@Overridepublic int del(Integer id) {// TODO Auto-generated method stubreturn super.getSqlSession().getMapper(WorkinggMapper.class).del(id);}@Overridepublic int modify(Workingg workingg) {// TODO Auto-generated method stubreturn super.getSqlSession().getMapper(WorkinggMapper.class).modify(workingg);}public static WorkinggService getWorkinggService() {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");WorkinggService wService = (WorkinggServiceImpl)ctx.getBean("WorkinggService");return wService;}}修改前的配置⽂件有映射,继承之后不需要了把这⼀段替换成了这段,测试类代码不变就好了<bean id="workinggService" class="cn.service.impl.WorkinggServiceImpl"> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean>不清楚的可以去⽹盘下载这个项⽬跑下。
SpringSpringMVCMyBatis整合
SpringSpringMVCMyBatis整合今天主要想总结一下SSM的整合,之前已经将MyBatis和spring整合起来了,那么这次主要介绍怎样加入SpringMVC这个框架,在整合之前先简单介绍一下SpringMVC:SpringMVC是一种基于Java的,实现了”WEB MVC”设计模式,基于请求驱动类型的轻量级WEB框架,是Spring框架的重要组成部分,该框架使用了MVC架构模式的思想,将WEB层进行职责功能的解耦,基于请求驱动类型指的就是使用“请求-响应”模型,该框架的目的就是帮助我们简化web系统的开发。
SpringMVC中最重要的一个就是前端控制器:FontController:DispatcherServlet,MVC架构模式中要求一定要存在前端控制器,而且一定是由Servlet实现的,而Struts2严格来说称之为MVC的变种架构。
Servlet:Servlet规范对路径匹配规则是有要求的:1.如果一个路径是以/开头,以/*结尾,称之为路径前缀匹配2.如果一个路径是以*.开头,那么这个路径称之为扩展匹配3.其它所有的路径都是精确匹配SpringMVC架构模式:天生和Spring框架集成,能简单的进行Web层的单元测试。
搭建SpringMVC的开发环境:1.首先自然是要引入相关的Jar包,然后在web.xml中配置前端控制器:servlet当然由于我们现在创建的是WEB项目,记得在web.xml中配置一个全局的参数,在Tomcat 启动时就会去读取该文件:applicationContext.xml以下就是web.xml文件的具体配置内容:<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd"><display-name>SpringMVCTest</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><listener><listener-class>org.springframework.web.context.ContextLoaderListener</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>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><!-- 解决put delete得不到数据的问题--><filter-name>HiddenHttpMethodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter><filter-mapping><filter-name>HiddenHttpMethodFilter</filter-name><servlet-name>springmvc</servlet-name></filter-mapping><!-- session超时定义,单位为分钟--><session-config><session-timeout>30</session-timeout></session-config><error-page><error-code>403</error-code><location>/WEB-INF/views/errors/403.jsp</location></error-page><error-page><error-code>404</error-code><location>/WEB-INF/views/errors/404.jsp</location></error-page><error-page><error-code>405</error-code><location>/WEB-INF/views/errors/405.jsp</location></error-page><error-page><error-code>500</error-code><location>/WEB-INF/views/errors/500.jsp</location></error-page></web-app>2.增加配置文件,默认DispatcherServlet会加载WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件,上面这样写就代表当前配置文件的名称为springmvc-servlet.xml,也就是配置文件的名称必须和Servlet的名字一样:“springmvc-servlet.xml”该配置文件中主要配置一些处理器映射器,处理适配器,视图解析器以及开启注解和扫描SpringMVC注解的包路径,以下就是具体配置内容:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xmlns:p="/schema/p"xmlns:aop="/schema/aop"xsi:schemaLocation="/schema/mvc/schema/mvc/spring-mvc-3.2.xsd/schema/beans/schema/beans/spring-beans-3.2.xsd/schema/context/schema/context/spring-context-3.2.xsd/schema/aop/schema/aop/spring-aop-3.2.xsd/schema/mvc/schema/mvc/spring-mvc-3.0.xsd"> <!-- 开启注解--><context:annotation-config /><!-- @Controller注解的使用前提配置--><mvc:annotation-driven /><!-- 扫描的包路径--><context:component-scan base-package="com.ecjtu.ssm"><context:exclude-filter type="annotation"expression="org.springframework.stereotype.Service" /></context:component-scan><mvc:interceptors><bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor" /><bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"p:paramName="lang" /></mvc:interceptors><beanclass="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"> </bean><!-- request --><beanclass="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean> <!-- 将静态文件指定到某个特殊的文件夹中统一处理--><mvc:resources location="/resources/" mapping="/resources/**" /><!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理--><mvc:resources mapping="/images/**" location="/images/" /><mvc:resources mapping="/css/**" location="/css/" /><mvc:resources mapping="/others/**" location="/others/" /><mvc:resources mapping="/js/**" location="/js/" /><mvc:resources mapping="/html/**" location="/html/" /><!-- 文件上传--><bean id="multipartResolver"class="monsMultipartResolver"><property name="maxUploadSize" value="10000000" /><!-- 10M --></bean><!--注解映射器--><beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMappin g"/><!-- 添加对图片、字节、字符串、XML及json数据格式的支持,注意添加json支持的jar包--><bean id="messageAdapter"class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter "><property name="messageConverters"><list><beanclass="org.springframework.http.converter.StringHttpMessageConverter" /><beanclass="org.springframework.http.converter.FormHttpMessageConverter" /><beanclass="org.springframework.http.converter.ByteArrayHttpMessageConverter" /><beanclass="org.springframework.http.converter.xml.SourceHttpMessageConverter" /><beanclass="org.springframework.http.converter.BufferedImageHttpMessageConverter" /><beanclass="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> </list></property></bean><!--启动Spring MVC的注解功能,设置编码方式,防止乱码--><beanclass="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter "><property name="messageConverters"><list><beanclass="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value></list></property></bean></list></property></bean><!-- 定义JSP文件的位置--><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass"value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" /></bean></beans>这里我也一并将applicationContext.xml文件的内容都贴出来吧,里面都有详细的注释<?xml version="1.0" encoding="UTF-8"?>default-autowire="no" default-lazy-init="false"><!-- 配置Spring组件扫描的包路径--><context:component-scan base-package="com.ecjtu.ssm.*"><!-- 不包括@Controller注解--><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /><context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice" /></context:component-scan><!-- 开启注解--><context:annotation-config /><!-- 读取外部的配置文件,这个配置文件主要配置了数据库的连接信息--><bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location"><value>classpath:db-config.properties</value></property></bean><!--本示例采用DBCP连接池,应预先添加DBCP包的依赖。