学习本节内容请先看"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. npm ERR! Error: tunneling socket could not be established的解决问题

    一般是代理问题 可以通过在命令行运行下列命令解决: npm run server npm run webdriver-update

  2. Pass Infrastructure基础架构(下)

    Pass Infrastructure基础架构(下) pass注册  PassRegistration该类在示例中简要显示了各种pass类型的定义 .该机制允许注册pass类,以便可以在文本pass管 ...

  3. Single Shot Multibox Detection (SSD)实战(下)

    Single Shot Multibox Detection (SSD)实战(下) 2. Training 将逐步解释如何训练SSD模型进行目标检测. 2.1. Data Reading and In ...

  4. 黎曼曲面Riemann Surface

    黎曼曲面Riemann Surface A Riemann surface is a surface-like configuration that covers the complex plane  ...

  5. SQL进阶总结(一)

    学而不思则罔,趁着假期好好总结下SQL的编程知识. 掌握SQL,首先有两个知识点要明确,要贯穿在我们整个学习SQL的过程中. SQL 不同于之前学习的面向过程.面向编程语言,SQL是一门面向集合的编程 ...

  6. Jmeter-逻辑控制器If Controller的实例运用

    一.If Controller概述 Expression (must evaluate to true or false) :表达式(值必须是true或false),也就是说,在右边文本框中输入的条件 ...

  7. 「题解」NWRRC2017 Joker

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:洛谷 P7028.gym101612J. 题意概述 有一个长度为 \(n\) 的数列,第 \(i\) 个元素的值为 \(a ...

  8. AIOps:企业运维新力量!

    摘要:企业运维需求及挑战,来看看华为AIOps如何解决! 本文分享自华为云社区<[云驻共创]AIOps?企业运维新力量!>,原文作者:启明. 国际惯例,我们先介绍一下AIOps的概念:AI ...

  9. 基于websocket vue 聊天demo 解决方案

    基于websocket vue 聊天demo 解决方案 demo 背景 电商后台管理的客服 相关技术 vuex axios vue websocket 聊天几种模型 一对一模型 一对一 消息只一个客户 ...

  10. Mysql权限管理以及sql数据备份

    权限管理和备份 用户管理 可视化管理 SQL命令操作 用户表:msql.user 同样就是对表的操作,就是对这张表的增删改查 -- 创建用户 create user kuangshen identfi ...