学习本节内容请先看"MyBatis的基本应用"。地址:http://lydia-fly.iteye.com/admin/blogs/2152948

Spring与MyBatis整合需要引入mybatis-spring.jar文件包。

其提供了与整合相关的API:

SqlSessionFactoryBean

--为整合应用提供SqlSession对象资源

MapperFactoryBean

--根据指定的Mapper接口生成Bean实例

MapperScannerConfigurer

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

SqlSessionFactoryBean:

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

在SpringMvc+MyBatis整合时,同样需要SqlSession。SqlSessionFactoryBean这个组件通过原来的SqlSessionFactoryBuilder生成SqlSessionFactory对象,为整合应用提供SqlSession对象。

  1. <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
  2. <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
  3. <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
  4. <property name="username" value="jsd1403" />
  5. <property name="password" value="root" />
  6. </bean>
  7. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  8. <property name="dataSource" ref="myDataSource" />
  9. <property name="mapperLocations" value="classpath:com/lydia/entity/*.xml" />
  10. </bean>

MapperFactoryBean:

其作用是根据Mapper接口获取我们想要的Mapper对象,它封装了原有的session.getMapper()功能的实现。

在定义MapperFactoryBean时,需要注入一下两个属性:

--SqlSessionFactoryBean对象,用于提供SqlSession

--要返回Mapper对象的Mapper接口

MapperFactoryBean配置如下:

  1. <!-- 方法一:定义mapper -->
  2. <bean id="deptMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
  3. <property name="mapperInterface" value="com.lydia.entity.DeptMapper"></property>
  4. <!-- 指定SqlSessionFactoryBean对象 -->
  5. <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
  6. </bean>

MapperScannerConfigurer配置使用:

注意:使用MapperFactoryBean时,当有一个Mapper(可以理解为表对应的映射文件)就MapperFactoryBean,当mapper少数可以通过applicationContext配置文件,通过id获取。

如果大量的mapper,需要使用mybatis-spring.jar通过的MapperScannerConfigurer组件,通过这个组件可以自动扫描指定包下的各个Mapper接口,并注册对应的MapperFactoryBean对象。

把之前的MapperFactoryBean的配置注释掉,换成如下配置依然执行通过:

  1. <!--方法2:
  2. 可以把扫描到的Mapper接口变成Mapper对象-->
  3. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  4. <!--指定要扫描包: 多个包用逗号隔开 -->
  5. <property name="basePackage" value="com.lydia,com.tarena" />
  6. <!--指定sqlSessionFactory -->
  7. <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
  8. </bean>

   注意:上面sqlSessionFactory属性也可以不用指定,默认会以Autowired方式注入。

   如果指定的某个包下并不完全是我们定义的Mapper接口,我们也可以通过自定义注解的方式指定生成MapperFactoryBean对象。

配置如下:

  1. <!--方法3:
  2. 只要Mapper类前面加上@MyBatisRepository 这个自己指定的注解就OK-->
  3. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  4. <property name="basePackage" value="com.lydia" />
  5. <property name="annotationClass" value="com.lydia.annotation.MyBatisRepository" />
  6. </bean>

 

自定义注解:MyBatisRepository.java

  1. public @interface MyBatisRepository {
  2. }

在DeptMapper接口中使用: 

  1. //@Repository("deptMapper")
  2. @MyBatisRepository
  3. public interface DeptMapper {
  4. void addDept(Dept dept);
  5. void deleteDept(Dept dept);
  6. void updateDept(Dept dept);
  7. ......
  8. }

 

测试:

  1. public class TestCase {
  2. @Test
  3. public void testFindAll() throws Exception {
  4. String conf = "applicationContext.xml";
  5. ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
  6. //获取对应的mapper对象,并调用mapper接口中对应的方法
  7. DeptMapper mapper = ac.getBean("deptMapper", DeptMapper.class);
  8. List<Dept> lists = mapper.findAllDept();
  9. for (Dept dept : lists) {
  10. System.out.println(dept);
  11. }
  12. }
  13. }

prignMVC+myBatis整合—— 基于MapperFactoryBean的更多相关文章

  1. spring与mybatis整合(基于配置文件)

    本文主要介绍了如何将mybatis和spring整合在一起使用,本人使用的是mybatis3.05 + spring3.1.0M2 ,使用dbcp作为数据库连接池. 1.编写数据访问接口(UserDa ...

  2. spring和mybatis的整合开发(基于MapperFactoryBean的整合开发(方便简单不复杂))

    MapperFactoryBean是mybati-spring团队提供的一个用于根据mapper接口生成mapper对象的类. 在spring配置文件中可以配置以下参数: 1.mapperInterf ...

  3. mybatis整合spring 之 基于接口映射的多对一关系

    转载自:http://my.oschina.net/huangcongmin12/blog/83731 mybatis整合spring 之  基于接口映射的多对一关系. 项目用到俩个表,即studen ...

  4. Mybatis整合Spring

    根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持.因此由Mybatis社区自己开发了一个My ...

  5. Mybatis学习--spring和Mybatis整合

    简介 在前面写测试代码的时候,不管是基于原始dao还是Mapper接口开发都有许多的重复代码,将spring和mybatis整合可以减少这个重复代码,通过spring的模板方法模式,将这些重复的代码进 ...

  6. Mybatis整合Spring -- typeAliasesPackage

    Mybatis整合Spring 根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持. 因此由M ...

  7. 160330、Mybatis整合Spring

    转自csdn文章 http://haohaoxuexi.iteye.com/blog/1843309 Mybatis整合Spring 根据官方的说法,在ibatis3,也就是Mybatis3问世之前, ...

  8. (转)MyBatis框架的学习(六)——MyBatis整合Spring

    http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...

  9. Spring+springmvc+Mybatis整合案例 annotation版(myeclipse)详细版

    Spring+springmvc+Mybatis整合案例 Version:annotation版 文档结构图: 从底层开始做起: 01.配置web.xml文件 <?xml version=&qu ...

随机推荐

  1. GPU特征处理技术

    GPU特征处理技术 GPU和CPU有何不同? 现代片上系统(SoC)通常集成中央处理器(CPU)和图形处理器(GPU).设计不同,这可能更取决于处理的数据集的类型. CPU经过优化,可以一次对几块数据 ...

  2. python+selenium_鼠标事件

    引言--在实际的web产品测试中,对于鼠标的操作,不单单只有click(),有时候还要用到右击.双击.拖动等操作,这些操作包含在ActionChains类中. 一.ActionChains类中鼠标操作 ...

  3. mybatis学习——类型别名(typeAliases)

    为什么要用类型别名? 答:类型别名可为 Java 类型设置一个缩写名字. 它仅用于 XML 配置,意在降低冗余的全限定类名书写. 举个例子说明: 在我们编写映射文件的时候: <?xml vers ...

  4. 番外篇:搭建Windows环境下的RabbitMQ环境

    搭建Windows环境下的Rabbitmq环境 下载erlang语言包OTP.官网地址: https://www.erlang.org/downloads 如果下载不了,可以选择百度网盘下载,里面的版 ...

  5. (5)使用自定Web根目录

    调整 Web 站点 http://server0.example.com 的网页目录,要求如下: 1) 新建目录 /webroot,作为此站点新的网页文件根目录 # mkdir /webroot # ...

  6. 白日梦的MySQL专题(第38篇文章)8分钟回顾MySQL的索引

    目录 公众号首发-推荐阅读原文-格式更好看 一.导读 二.聚簇索引 三.二级索引 四.联合索引 4.1.什么是联合索引 4.2.左前缀原则 4.3.联合索引的分组&排序 五.覆盖索引 六.倒排 ...

  7. 判断Linux 系统负荷是否过载

    1.如果你的电脑很慢,可以查看下它的工作量是否太大. 在Linux系统中,我们一般使用uptime,或者w 或者top命令 如下:在操作系统中输入 :uptime 08:55:44 up 23 day ...

  8. Linux Oracle 中文乱码解决

    1.Linux操作系统Oracle11g设置别名的时候发现中文乱码 2.直接修改环境变量 添加 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 3.执行命令使环境变 ...

  9. 铂金07:整齐划一-CountDownLatch如何协调多线程的开始和结束

    欢迎来到<并发王者课>,本文是该系列文章中的第20篇. 在上一篇文章中,我们介绍了Condition的用法.在本文中,将为你介绍CountDownLatch的用法.CountDownLat ...

  10. gitlab 设置tag保护及取消tag保护功能

    用gitlab管理员登录系统 进入项目->设置->Repository 设置项目的Tag保护 效果展示 取消Tag保护 效果展示