Spring与MyBatis整合

一、概述

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

二、Mapper动态代理实现整合

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

在 Dao 接口的包中创建 MyBatis 的映射文件 mapper,命名与接口名相同,本例为IStudentDao.xml。mapper 中的 namespace 取值也为 Dao 接口的全限定性名。
Spring与MyBatis整合
(2)定义MyBatis主配置文件

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

Spring与MyBatis整合
3)定义Spring配置文件
注册SqlSessionFactoryBean

Spring与MyBatis整合
使用 MapperFactoryBean 生成 Dao 代理对象
由于使用 Mapper 动态代理方式没有 Dao 实现类,所以 Dao 的实现类对象由代理工厂生成:MapperFactoryBean 映射工厂 Bean。

Spring与MyBatis整合
添加事务配置

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

Mapper 扫描配置器 MapperScannerConfigurer 会自动生成指定的基本包中 mapper 的代理对象。该 Bean 无需设置 id 属性。此时需要删除 MapperFactoryBean 的配置。
Spring与MyBatis整合
向 Service 注入接口名
向 Service 注入 Mapper 代理对象时需要注意,由于通过 Mapper 扫描配置器MapperScannerConfigurer 生成的 Mapper 代理对象没有名称,所以在向 Service 注入 Mapper代理时,无法通过名称注入。但可通过接口的简单类名注入,因为生成的是这个 Dao 接口的对象,这是多态的应用。

Spring与MyBatis整合