史上最简单的mybatis整合教程

现在Mybatis数据库框架已经成为大多数公司项目的首选了,和JPA或者Hibernate框架相比,Mybatis最大的优点就是简单易上手,所以开发成本就相对比较低,而且懂得写SQL命令的人,入门基本没什么难度。我们还可以通过Mybatis的插件来生成我们的实体类和mapper的xml文件,可以让我们少些很多的代码。还有大家还记得上次介绍log4j2的博客吗,这边再教大家如何配置log4j2来打印SQL日志。

1.添加相关依赖

我们先来引用Mybatis、Mybatis插件、log4j2依赖,具体依赖如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
<?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>springboot-mybatis</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>

<name>SpringBootMybatis</name>
<description>Mybatis Demo project for Spring Boot</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.15.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>
<!--spring-boot-starter-web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 切换log4j2日志读取 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

<!--log4j2依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

<!-- 支持识别yml配置 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>

<!--test依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<!--spring-boot-mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>

<!-- 导入Mysql数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>

<!--mybatis生成插件-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

<!--mybatis插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<!-- 代表mybatis generator生成的内容不要覆盖已有的内容 -->
<overwrite>false</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>

2.添加配置文件

这边我们的配置文件可以会比平时要多一些,总共有三个配置文件:application.yml、generatorConfig.xml、log4j2.yml。这三个文件的作用分别是:mybatis的配置文件、mybatis插件配置文件、log4j2日志配置文件。log4j2的文章已经给大家介绍了log4j2.yml配置了,今天我主要介绍如何打印SQL那部分的配置。application.yml、generatorConfig.xml的配置比较繁琐一点,这边我先给出具体配置文件信息,关于配置文件更加细致的介绍,我会在之后的视频中给大家具体介绍的。

application.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
server:
port: 8080

spring:
aop:
proxy-target-class: true
#配置mybatis
datasource:
#数据库url地址
url: jdbc:mysql://basic-mysql-dev.infuneye.com:3306/yfy_aliyun_test?useSSL=false
#数据库名称
username: infuneye
#数据库密码
password: infuneye_2017
#数据库驱动名称
driver-class-name: com.mysql.jdbc.Driver
#最大等待时间
maxWait: 60000
maxActive: 20
initialSize: 1
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
#指定mybatis映射文件的地址
mybatis:
mapper-locations: classpath:mapper/*.xml

generatorConfig.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 配置生成器 -->
<generatorConfiguration>
<context id="mysql" defaultModelType="hierarchical" targetRuntime="MyBatis3Simple">
<property name="useActualColumnNames" value="true" />
<!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表; 一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->
<property name="autoDelimitKeywords" value="false"/>
<!-- 生成的Java文件的编码 -->
<property name="javaFileEncoding" value="UTF-8"/>

<!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>

<!-- 注释生成器 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>

<!-- 必须要有的,使用这个配置链接数据库 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://basic-mysql-dev.infuneye.com/yfy_aliyun_test" userId="infuneye" password="infuneye_2017">
<!-- 这里面可以设置property属性,每一个property属性都设置到配置的Driver上 -->
</jdbcConnection>

<!-- java模型创建器,是必须要的元素 负责:1,key类(见context的defaultModelType);2,java类;3,查询类
targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制; targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录 -->
<javaModelGenerator targetPackage="com.example.demo.model" targetProject="src/main/java">
<!-- for MyBatis3/MyBatis3Simple 自动为每一个生成的类创建一个构造方法,构造方法包含了所有的field;而不是使用setter; -->
<property name="constructorBased" value="false"/>
<!-- for MyBatis3 / MyBatis3Simple 是否创建一个不可变的类,如果为true, 那么MBG会创建一个没有setter方法的类,取而代之的是类似constructorBased的类 -->
<property name="immutable" value="false"/>
</javaModelGenerator>


<!-- 生成SQL map的XML文件生成器, 注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),
或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置
targetPackage/targetProject:同javaModelGenerator -->
<sqlMapGenerator targetPackage="mapper"
targetProject="src/main/resources">
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>

<!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口 targetPackage/targetProject:同javaModelGenerator
type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER -->
<javaClientGenerator targetPackage="com.example.demo.mapper"
type="XMLMAPPER" targetProject="src/main/java">
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<property name="enableSubPackages" value="true"/>

<!-- 可以为所有生成的接口添加一个父接口,但是MBG只负责生成,不负责检查 <property name="rootInterface"
value=""/> -->
</javaClientGenerator>

<table tableName="yfy_user_grade" domainObjectName="UserGrade">
<property name="useActualColumnNames" value="true" />
<!-- 参考 javaModelGenerator 的 constructorBased属性 -->
<property name="constructorBased" value="false"/>
<generatedKey column="id" sqlStatement="JDBC"/>
</table>
</context>
</generatorConfiguration>

log4j2.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Configuration:
status: warn
Properties: # 定义全局变量
Property: # 缺省配置(用于开发环境)。其他环境需要在VM参数中指定,如下:
- name: log.level.console
value: debug
- name: log.level.com.example.demo.mapper
value: trace
- name: log.path
value: /opt/logs
- name: project.name
value: test

Appenders:
Console: # 输出到控制台
name: CONSOLE
target: SYSTEM_OUT
ThresholdFilter:
level: ${sys:log.level.console} # “sys:”表示:如果VM参数中没指定这个变量值,则使用本文件中定义的缺省全局变量值
onMatch: ACCEPT
onMismatch: DENY
PatternLayout:
pattern: "%d{yyyy-MM-dd HH:mm:ss}:%5p %10t [%15F:%3L] - %m%n"
RollingFile: # 输出到文件,超过128MB归档
- name: ROLLING_FILE
ignoreExceptions: false
fileName: "${log.path}/${project.name}.log"
filePattern: "${log.path}/${project.name}-%d{yyyy-MM-dd}.log"
append: true
PatternLayout:
pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%5p %20t [%50F:%3L] - %m%n"
Policies:
TimeBasedTriggeringPolicy:
interval: 1
modulate: true
DefaultRolloverStrategy:
max: 20

Loggers:
Root:
level: info
AppenderRef:
- ref: CONSOLE
- ref: ROLLING_FILE
Logger: # 为 com.infun.platform.es.mapper包配置特殊的Log级别,方便调试 SQL 语句输出
- name: com.example.demo.mapper
additivity: false
level: ${sys:log.level.com.example.demo.mapper}
AppenderRef:
- ref: CONSOLE
- ref: ROLLING_FILE

我们只要在Logger下面- name中加入mapper包路径就可以打印SQL日志了。














配置文件写好之后,我们用Mybatis来生成一下XML和实体类,在maven project中双击mybatis.generator插件就可以自动生成XML和实体类了,至于生成文件的路径、名称、属性都在generatorConfig.xml配置里面说的很清楚了,这边我就不再多此一举了。双击mybatis.generator之后,我们可以看到我们的实体类、mapper类、XML这些都生成了。如下所示:













3.测试控制类

最后我们写一个控制类来测试一下我们集成的Mybatis有没有问题,控制类具体代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
*
* @author qiang220316
* @date 2018/8/9
*/

@RestController
public class UserController {

@Autowired(required = false)
private UserGradeMapper userGradeMapper;

@RequestMapping("mybatis")
public Object selectAllUser(){
return userGradeMapper.selectAll();
}
}

4.开始测试






这边我们就单单查询数据库一张表的所有信息,表的具体信息如下所示:

















表中的数据如下所示:
















一切准备就绪之后,我们就启动服务,然后再浏览器中输入查询的地址,我们会看到数据库的信息都被查询出来了,控制台上面也打印出相应的SQL命令了,这说明Mybatis集成成功了。













集成的过程就结束了,整个流程基本没什么难点,如果非要说难点的化,一方面可能是能用的mybatis插件比较难找,插件的配置文件可能需要熟悉一下。另一方面就是log4j2配置SQL日志会稍微比较繁琐一点,需要找具体的配置点。好了今天的内容就介绍到这边了。

更多内容敬请关注:“林老师带你学编程

林老师带你学编程 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!