Spring与Mybatis整合需要引入一个mybatis-spring.jar包,该整合包有Mybatis提供,可以从Mybatis官网下载。

该jar包提供了几个API:

1.SqlSessionFactoryBean-为整合应用提供SqlSession对象资源。

  在单独使用MyBatis时,所有操作都是围绕SqlSession展开的,SqlSession是通过SqlSessionFactory获取的,SqlSessionFactory又是通过SqlSessionFactoryBuilder创建生成的。

  在Spring和Mybatis整合应用时,同样需要SqlSession,而SqlSessionFactoryBean组件的作用就是通过原SqlSessionFactoryBuilder生成SqlSessionFactory对象,为整合应用提供SqlSession对象。

  SqlSessionFactoryBean在applicationContext.xml中定义格式如下:

  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

    <!-- 指定连接资源 -->

    <property name="dataSource" ref="myDataSource"/>

    <!-- 指定映射文件 -->

    <property name="mapperLocations" value="classpath:org/tarena/entity/*.xml"/>

  </bean>

  在定义SqlSessionFactoryBean时,可以使用以下常用属性:

  --dataSource:用于指定连接数据库的数据源

  --mapperLocations:用于指定Mapper文件存放的位置

  --configLocation:用于指定Mybatis的配置文件位置,如果指定了该属性,那么会以该配置文件的内容作为配置信息构建对应的SqlSessionFactoryBuilder,但是后续属性                                   指定的内容会覆盖该配置文件里面指定的对应内容。

  --typeAliasesPackage:它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。多个package之间可以用逗号或者分号等                                     来进行分隔。

  --typeAliases:数组类型,用来指定别名的,指定了这个属性后,Mybatis会把这个类型的短名称作为这个类型的别名。

2.MapperFactoryBean-根据指定Mapper接口生成Bean实例。

3.MapperScannerConfigurer-根据指定包批量扫描Mapper接口并生成实例。

  在使用MapperFactoryBean时,有一个Mapper就需要定义一个对应的MapperFactoryBean。但当遇到大量Mapper时就需要使用使用MapperScannerConfigurer组件,通过这个组件会自动扫描各个Mapper接口,并注册对应的MapperFactoryBean对象。

  在定义MapperScannerConfigurer时,只需要指定一个basePackage即可。basePackage用于指定Mapper接口所在的包,这个包及其所有子包下面的Mapper接口都将被搜索到,并把它们注册为一个个MapperFactoryBean对象。多个包之间可以使用逗号或者分号进行分隔。

  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

    <property name="basePackage" value="org.tarena.mapper"/>

  </bean>

注意:sqlSessionFactory属性可以不用指定,会以Autowired方式自动注入

  MapperScannerConfigurer定义示例:

  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

    <property name="basePackage" value="org.tarena"/>

    <property name="annotationClass" value="org.tarena.annotation.MyBatisRepository"/>

  </bean>

  上面配置定义:MapperScannerConfigurer自动扫描org.tarena包下所有接口,遇到带@MyBatisRepository标记的将对应MapperFactoryBean对象注册。

4.SqlSessionTemplate

  上述整合完成后,程序可直接使用Spring容器中的Mapper接口实例进行编程。此外,mybatis-spring.jar还提供了一个SqlSessionTemplate组件,也可以将该组件注入给程序中的DAO,在DAO中利用SqlSessionTemplate编程。

  基于SqlSessionTemplate的DAO示例代码如下

  @Repository

  public class MyBatisDeptDAO implements DeptDAO{

  private SqlSession Template template;

  @Autowired

  public void setTemplate(SqlSession Template template){

  this.template=template;

  }

  public List<Dept> findAll(){

  List<Dept> list= template.selectList("findAll");

  return list;

  }

  }

  基于SqlSessionTemplate的DAO配置信息如下:

  <!-- 定义SqlSessionTemplate -->

  <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">

    <constructor-arg  index="0" ref="sqlSessionFactory"/>

  </bean>

  <!-- 扫描DAO并注入template -->

  <context:component-scan base-package="org.tarena.dao"/>

  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

  </bean>

    

整合步骤介绍

  基于SpringMVC和MyBatis技术开发的主要步骤如下:

  1.创建工程,搭建SpringMVC和MyBatis技术环境

    1)创建一个Web工程

     2)添加MyBatis相关技术环境

      -引入数据库驱动包和MyBatis开发包

      -引入dbcp连接池开发包

    3)添加SpringMVC相关技术环境

      -引入Spring IOC,JDBC,TX等支持的开发包

      -引入Spring webmvc支持的开发包

        

      -在src下添加applicationContext.xml配置文件

      -在web.xml中配置DispatcherServlet主控制器

    4)引入MyBatis和Spring整合开发包mybatis-spring.jar  

  2.基于MapperScannerConfigurer方式整合MyBatis的Mapper接口(推荐)

     1)根据数据表编写实体类

    2)编写Mapper映射文件,在XML中添加SQL操作的定义

    3)编写Mapper接口,定义SQL操作方法

    4)在Spring配置文件中定义以下Bean

      -DataSource

      -SqlSessionFactoryBean

      -MapperScannerConfigurer

    5)测试Spring容器的DAO组件

  3.编写和配置SpringMVC的主要组件,例如:Controller,HandlerMapping,ViewResolver等

     1)编写Controller和请求处理方法

    2)配置<mvc:annotation-driven/>,支持@RequestMapping

    3)配置Controller组件

      -开启组件扫描,将Controller扫描到Spring容器

      -需要DAO时采用注入方式使用

      -在请求处理方法上使用@RequestMapping指定对应的请求

    4)配置ViewResolver组件

  4.编写JSP视图组件,利用标签和表达式显示模型数据

     1)JSP可以使用JSTL标签库,需要引入开发包

    2)JSP可以使用EL表达式

    3)JSP可以使用SpringMVC的表单标签

  5.测试程序

spring mvc mybatis的更多相关文章

  1. spring Mvc + Mybatis 中使用junit

    在Spring Mvc + Mybatis的项目中我们有时候需要在测试代码中注入Dao操作数据库,对表进行增删改查,实现如下: 这是一般的maven项目项目结构 测试代码一般写在src/test/ja ...

  2. 基于Spring + Spring MVC + Mybatis + shiro 高性能web构建

    一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJS,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详 ...

  3. spring + spring mvc + mybatis + react + reflux + webpack Web工程例子

    前言 最近写了个Java Web工程demo,使用maven构建: 后端使用spring + spring mvc + mybatis: 前端使用react + react-router+ webpa ...

  4. spring mvc+mybatis+多数据源切换

    spring mvc+mybatis+多数据源切换,选取oracle,mysql作为例子切换数据源.oracle为默认数据源,在测试的action中,进行mysql和oracle的动态切换. web. ...

  5. Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合(注解及源码)

    Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合(注解及源码) 备注: 之前在Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合中 ...

  6. [转]基于Spring + Spring MVC + Mybatis 高性能web构建

    http://blog.csdn.net/zoutongyuan/article/details/41379851/ 一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.Angula ...

  7. Spring+Spring MVC+MyBatis

    Spring+Spring MVC+MyBatis 目录 一.新建一个基于Maven的Web项目 二.创建数据库与表 三.添加依赖包 四.新建POJO实体层 五.新建MyBatis SQL映射层 六. ...

  8. 基于Spring + Spring MVC + Mybatis 高性能web构建

    基于Spring + Spring MVC + Mybatis 高性能web构建 一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJs,做了大量的研究,对前后端交互 ...

  9. maven/eclipse搭建ssm(spring+spring mvc+mybatis)

    maven/eclipse搭建ssm(spring+spring mvc+mybatis) 前言 本文旨在利用maven搭建ssm环境,而关于maven的具体内容,大家可以去阅读<Maven 实 ...

  10. java企业架构 spring mvc +mybatis + KafKa+Flume+Zookeeper

    声明:该框架面向企业,是大型互联网分布式企业架构,后期会介绍linux上部署高可用集群项目. 项目基础功能截图(自提供了最小部分)      平台简介        Jeesz是一个分布式的框架,提供 ...

随机推荐

  1. GUID是什么意思及Guid在sqlserver中的使用

    GUID(全球唯一标识)是微软使用的一个术语,由一个特定的算法,给某一个实体,如Word文档,创建一个唯一的标识,GUID值就是这个唯一的标识码.GUID广泛应用于微软的产品中,用于识别接口.复制品. ...

  2. 文字排版--删除线(text-decoration:line-through)

    如果想在网页上设置删除线怎么办,这个样式在电商网站上常会见到: 上图中的原价上的删除线使用下面代码就可以实现: .oldPrice{text-decoration:line-through;}

  3. 重要性!important

    我们在做网页代码的时,有些特殊的情况需要为某些样式设置具有最高权值,怎么办?这时候我们可以使用!important来解决. 如下代码: p{color:red!important;} p{color: ...

  4. JavaScript学习笔记之原型对象

    本文是学习<JavaScript高级程序设计>第六章的笔记. JS中,便于批量创建对象的三种模式: 1.工厂模式:用一个函数封装创建对象的细节,传入必要的参数,在函数内部new一个对象并返 ...

  5. set,multiset容器类型

    set和multiset会根据特定的排序准则,自动将元素排序.两者不同处在于multiset允许元素重复而set不允许. 一.集和多集(set 和multiset 容器类) 在使用set和multis ...

  6. 【HDU4366】【DFS序+分块】Successor

    Problem Description Sean owns a company and he is the BOSS.The other Staff has one Superior.every st ...

  7. 常见的iis日志代码!

    2xx  成功 200  正常:请求已完成. 201  正常:紧接 POST 命令. 202  正常:已接受用于处理,但处理尚未完成. 203  正常:部分信息 — 返回的信息只是一部分. 204   ...

  8. 仿照淘宝首页做的一个高度伪对齐demo

    功能就是当右边高度没有左边高的情况下做的一些处理,由于本人技术有限,不兼容所有浏览器, <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tra ...

  9. iOS 数据持久性存储-对象归档

    对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件的内容(也称为解档,反序列化) 主要涉及两个类:NSKeyedArichiver.NSKey ...

  10. C++ 语法规则

    C++ 中的布尔类型:布尔类型只占用一个bit ,但是如果连续定义多个布尔类型时,编译器可能会多个布尔类型定义在一起.true  编译器用1来表示.false  编译器用0来表示. 将一个其他类型的数 ...