经过上一篇 的学习,我们了解到 mybatis
中的几个重要的类,分别是:
- SqlSessionFactory
- SqlSession
- Mapper
想要把 mybatis 跑起来,就需要这三种类及其对象的相互配合。
那么传说中的 spring 整合 mybatis 是怎么整合的呢?关键点就是让这些对象被 Spring 去创建托管起来,然后在需要的时候注入即可。示意图如下:
这里的 MAP
集合就相当于简化版的 Spring容器
,里面放的都是一个个被托管的对象。具体的整合可以参考mybatis-spring 这个官方教程,核心过程和示意图中的一样,此处不再赘述。
关键是来看下 spring boot 对于我们使用 mybatis 来说做了什么,进而可以回过头来和 spring 进行对比。
使用 spring boot 整合非常简单,分为三步:
- 引入开发包:
<!--这是前文引入的-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--这是新引入的-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
注意,开发包里面有 starter
字样,后面会进行说明。
- 配置数据源信息:
在 application.yml
或者application.properties
里面进行配置,二者的区别是文本格式的区别。这里使用 application.yml
进行配置:
spring:
datasource:
url: jdbc:mysql://url
username: xxx
password: xxx
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath:/mapper/*.xml
mapper-locations
的作用是告诉 mybatis 我们的 mapper文件去哪里找。classpath
代表 resource 下面的路径,所以我们的mapper xml 文件是放在 resource/mapper/ 下面的。
- 编写 mapper 接口 和 对应的 xml文件,这个同上文。不同之处在于,我们给接口多加两个注解:
@Mapper
@Repository
public interface TestMapper {
SysUser selectUser();
}
其中,注解 Repository
告诉 spring,让spring把这个 TestMapper 进行托管,后续注入的时候需要用到。
注解 mapper
则告诉 spring boot
,这个类需要自动配置(后面会小结的)。
完了
这样就整合完了
那么如何使用呢?和 spring 整合后的使用一样,比如可以利用 @Autowired 注入进来使用,如:
@Autowired
private TestMapper testMapper;
如果你和上面链接中的spring 整合过程相比较一下,spring boot 的整合过程已经极度精简了。你只是引入了库,配置了必要的连接信息,然后开发了数据层的功能,其他地方就可以直接注入使用了。
不得不说,spring boot 化繁为简的能力实在是高。
那么,为什么会这么简单呢?关键点就在于 maven 依赖中的那个 starter
字眼,这实际上是 mybatis 官方结合 spring boot 提供的自动配置能力,开发的一套自动配置依赖。
像是 SqlSessionFactory 等就不需要再像 spring 一样进行额外配置了。我们填写了关键的数据库信息,spring boot 会扫描到并利用这些信息去构建 SqlSessionFactory对象,并且会根据@Mapper
注解让这些接口享受到自动配置好的上下文环境。
然后我们调用对应的数据方法时,就可以直接对数据库进行操作了。当然,这一系列过程中涉及到很多复杂的交互,后续会进行说明。但是本篇中,我们只是感受一下 spring boot 的威力,真的是 spring 威力加强版。
更多参见:java后端开发教程系列目录