Spring与MyBatis整合

一、概述

  • 将MyBatis与Spring进行整合,主要解决的问题就是将SqlSessionFactory对象交由Spring容器来管理,所以,该整合,只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在Spring容器中,再将其注入给Dao的实现类即可完成整合。

二、Mapper动态代理实现整合

(1)导入相关jar包、定义映射文件mapper

  • 在 Dao 接口的包中创建 MyBatis 的映射文件 mapper,命名与接口名相同,本例为IStudentDao.xml。mapper 中的 namespace 取值也为 Dao 接口的全限定性名。
    这里写图片描述

(2)定义MyBatis主配置文件

  • 在src下定义Mybatis的主配置文件,命名为mybatis.xml。
  • 注意两点:
    1,主配置文件中不再需要数据源的配置了。因为数据源要交给 Spring 容器来管理了。
    2,这里对 mapper 映射文件的注册,使用package标签,即只需给出 mapper 映射文件所在的包即可。因为 mapper 的名称与 Dao 接口名相同,可以使用这种简单注册方式。这种方式的好处是,若有多个映射文件,这里的配置也是不用改变的。当然,也可使用resource标签方式。
    这里写图片描述

(3)定义Spring配置文件

  • 注册SqlSessionFactoryBean
    这里写图片描述
  • 使用 MapperFactoryBean 生成 Dao 代理对象

    由于使用 Mapper 动态代理方式没有 Dao 实现类,所以 Dao 的实现类对象由代理工厂生成:MapperFactoryBean 映射工厂 Bean。
    这里写图片描述

  • 添加事务配置
    这里写图片描述

三、支持扫描的 Mapper 动态代理实现整合

  • Mapper 扫描配置器 MapperScannerConfigurer 会自动生成指定的基本包中 mapper 的代理对象。该 Bean 无需设置 id 属性。此时需要删除 MapperFactoryBean 的配置。
    这里写图片描述

  • 向 Service 注入接口名
    向 Service 注入 Mapper 代理对象时需要注意,由于通过 Mapper 扫描配置器MapperScannerConfigurer 生成的 Mapper 代理对象没有名称,所以在向 Service 注入 Mapper代理时,无法通过名称注入。但可通过接口的简单类名注入,因为生成的是这个 Dao 接口的对象,这是多态的应用。
    这里写图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐