Spring-boot-Mybatis-Starter

来源:互联网 发布:刘德华 17岁 知乎 编辑:程序博客网 时间:2024/04/19 01:57

一、简介

以我的理解,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官网介绍中我们可以看到,它启动后会做如下事情:

  1. 自动监测存在的DataSource(即在properties文件中配置的DataSource,如图3)
  2. 通过此DataSourse自动创建并注册SqlSessionFactory实例
  3. 从SqlSessionFactory中注册并创建出一个SqlSessionTemplate实例
  4. 自动扫描你的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://172.17.22.80:3306/demospring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.jdbc.Driver#mybatis.type-aliases-package=com.example.demo.Model#非必需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>