一、简介
以我的理解,spring-boot-mybatis-starter就是mybatis在spring boot的嵌入,嵌入了一些上下文的自动配置,把一些容器中需要的实例的内容,由代码编写转换为外部配置。
在用Spring Initializr初始化的项目中,有SQL选项,当选择了Mybatis后,pom.xml文件中会自动带有mybatis-spring-boot-starter的配置。
【图1】
这个便是Spring-boot-Mybatis。
在此之前,用Mybatis的方式是引用:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
现在只需引用mybatis-spring-boot-starter,查看它的dependencies,包含有mybatis-spring、spring-boot-starter-jdbc。
而s-b-m-s则能自动识别配置有的datasource(也就是在.properties中配置的datasource),而不需要再在代码中写一个DataSource的bean,一个SqlSessionFactory的bean. 如图2。因为它的发明正是为了方便和简化这些业务。
【图2】
二、它做的事
在spring-boot-starter官网介绍中我们可以看到,它启动后会做如下事情:
- 自动监测存在的DataSource(即在properties文件中配置的DataSource,如图3)
- 通过此DataSourse自动创建并注册SqlSessionFactory实例
- 从SqlSessionFactory中注册并创建出一个SqlSessionTemplate实例
- 自动扫描你的mappers文件,链接他们到SqlSessionTemplate并且注册到Spring的上下文中,这样他们就能注入到你的Mapper实例.
【图3】
这里要注意的是:
MyBatis-Spring-Boot-Starter会默认去寻找标注有@Mapper的mapper文件。但是一个个去配置,重复的工作程序员一般都要避免,所以MyBatis-Spring-Boot-Starter也允许你一步到位:
其途径有三种,我只介绍MapperScan标注法,其他两种方法,请看官网Injecting Mappers
MapperScan(“mapper的位置”)标注,直接将所有的mapper都注入到Spring环境中来了,每个Mapper上的@Mapper标注就可以省略掉啦~
三、我们做的事
1. 在pom中引用它,具体看页尾附件。
2. 在properties文件中配置DataSource;
3. 在properties配置它的参数type-aliases-package(Mapper中用到的参数或返回的模型),mapper-locations(mapper的xml配置文件路径),这些参数具体看官网Configuration部分
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis.mapper-locations=classpath:mappers/*.xml
4. 注入mappers,也就是上文介绍的MapperScan标注配置。
以上四步缺一不可哦
附件:(pom.xml配置)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>