学习本节内容请先看"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. PyTorch数据加载处理

    PyTorch数据加载处理 PyTorch提供了许多工具来简化和希望数据加载,使代码更具可读性. 1.下载安装包 scikit-image:用于图像的IO和变换 pandas:用于更容易地进行csv解 ...

  2. 相机自动对焦AF原理

    相机自动对焦AF原理 AF性能是判断相机好坏的重要指标,主要从准确度和速度两个方面来进行考察,本文将介绍自动对焦的几种方式. 一.凸透镜成像原理 二.三种对焦方法 有公式在手,只要给相机安个测距仪就好 ...

  3. 摄像头标定GML Camera Calibration

    摄像头标定GML Camera Calibration GML Camera Calibration官方版是一款十分优秀出色的相机标定软件,GML Camera Calibration官方版界面友好, ...

  4. Pass Infrastructure基础架构(上)

    Pass Infrastructure基础架构(上) Operation Pass OperationPass : Op-Specific OperationPass : Op-Agnostic De ...

  5. 前台JS遍历Table的所有单元格数据内容

    在日常开发过程中为了减少与后台服务器的交互次数,大部分的功能都会放到前台使用JS来完成. 例如:一个表中有ID(FOCUS_SEQ)和Name(COLUMNCTRL)两个字段,其中ID是自定义连续增长 ...

  6. Redis系列(二):常用操作

    一.数据类型 如果学过数据结构就会知道,操作往往是在特定的数据结构上的,不同的数据结构就会有不同的操作,Redis支持以下的数据类型: 字符串(Strings),列表(Lists),集合(Sets), ...

  7. 深入解读Redis分布式锁

    之前码甲哥写了两篇有关线程安全的文章: 你管这叫线程安全? .NET八股文:线程同步技术解读 分布式锁是"线程同步"的延续 最近首度应用"分布式锁",现在想想, ...

  8. 【VBA】列号与字母(列名)的相互转换 (自定义函数)

    1. '列号转字母(列名) Function Num2Name(ByVal ColumnNum As Long) As String On Error Resume Next Num2Name = & ...

  9. 怎么回答面试官:你对Spring的理解?

    最近看了点Spring的源码,正好来稍微扯一扯,帮一部分培训班的朋友撕开一道口子,透透气.我自己都是看的培训班视频,所以也算培训班出身吧.所以下文开口闭口"培训班",不要觉得是我在 ...

  10. Kubernetes集群安装

    一.环境介绍 主机名 IP地址 master 192.168.0.100 node1 192.168.0.101 node2 192.168.0.102 1.1.操作系统: CensOS8.4.210 ...