MyBatis之Spring集成

概述

MyBatis与Spring集成,将由Spring管理Mapper接口,而且由Spring维护线程安全的SqlSession,自动管理SqlSession,包括事务提交、回滚、SqlSession关闭等机制。安全

怎么作?

MyBatis与Spring集成,只须要定义两个必要的bean就完事了。app

  1. 必须定义一个database的bean,这个其实不属于MyBatis和Spring的范畴
  2. 定义一个SqlSessionFactoryBean,这个是必须的
  3. 定义MapperFactoryBean,做为Mapper接口的FactoryBean,这个也是必须的
    1. 一个Mapper接口有一个MapperFactoryBean
    2. 一个MapperFactoryBean有一个SqlSession对象
    3. 这个SqlSession对象是SqlSessionTemplate对象,是线程安全的,内部维护SqlSession和线程的绑定关系
  4. 实际项目中Mapper接口是不少的,为了避免让咱们一个个去定义这么的bean,Spring提供了不少的扫描机制
    1. 使用@MapperScan注解
    2. 定义一个MapperScannerConfigurer的bean,指定Mapper接口的包名

PS:不管是@MapperScan注解仍是定义MapperScannerConfigurer的bean,内部都使用ClassPathMapperScanner来扫描指定的包路径,为每个Mapper接口都建立一个MapperFactoryBean。spa

SqlSessionFactoryBean

SqlSessionFactoryBean实现Spring的FactoryBean,用于建立SqlSessionFactory对象,是须要定义一个。线程

MapperFactoryBean

MapperFactoryBean实现Spring的FactoryBean,用于建立某个Mapper接口的代理实现。一个MapperFactoryBean负责建立一个Mapper接口的实现,同时内部建立一个SqlSessionTemplate类型的SqlSession(线程安全),所以咱们须要定义多个。代理

为了简化咱们的工做,提供了两中扫描机制:对象

  • @MapperScan
  • MapperScannerConfigurer

@MapperScan

Spring的JavaConfig方式的扫描,接口

MapperScannerConfigurer

相关文章
相关标签/搜索