mybatis简介
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的
Java对象)映射成数据库中的记录。
关于SpringBoot与Mybatis的整合,我将使用通用 Mapper与Mybatis分页插件这两个插件,这两个插件能够帮助我们更加方便与高效的使用Mybatis。
项目依赖
需要加入通用Mapper,分页插件以及代码生成器的依赖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<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--引入该starter时,和mybatis官方的starter没有冲突,但是官方的自动配置不会生效-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.2.4</version>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--分页插件依赖-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--代码生成器依赖-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
</dependencies>
配置文件
1 |
|
分页插件配置
- helperDialect: 分页插件会自动检测当前的数据库连接,自动选择合适的分页方式。你可以配置helperDialect属性来指定分页插件使用哪种方言。比如,这里我们设置的是 mysql。
- reasonable: 分页合理化参数,默认值为 false ,当参数设置为 true时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。
- supportMethodsArguments: 支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
更多分页插件的配置请参阅 官方文档: https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
逆向工程——Mybatis Generator
mybatis的一个特点就是需要开发者自己去编写 SQL语句,如果表非常多的话,难免会很麻烦,所以 mybatis官方推出一个逆向工程,可以针对数据库单表逆向生成 mybatis需要的代码(实体类,Mapper接口,XML文件),具体做法是使用Mybatis Generator插件生成实体类,Mapper接口以及对应的XML文件
在数据库创建测试表
1 | DROP TABLE IF EXISTS `user`; |
配置Mybatis 代码生成工具的配置文件
在创建的Web工程中,创建相应的 package如下:
- com.pjmike.mybatis.dao : 用来存放Mapper接口对象
- com.pjmike.mybatis.model: 用来存放实体类
- src/main/resources/mapper: 用来存放对应的mapper文件
将Mybatis 代码生成器的配置文件放在 resouces下面,此处命名为 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<?xml version="1.0" encoding="UTF-8"?>
<generatorConfiguration>
<context id="MysqlContext" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="com.pjmike.mybatis.MyMapper"/>
</plugin>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/demo"
userId="root"
password="root">
</jdbcConnection>
<!-- 对于生成的pojo所在包 -->
<javaModelGenerator targetPackage="com.pjmike.mybatis.model" targetProject="src/main/java">
<property name="immutable" value="false"/>
</javaModelGenerator>
<!-- 对于生成的mapper所在目录 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
<!-- 配置mapper对应的java映射 -->
<javaClientGenerator targetPackage="com.pjmike.mybatis.dao" targetProject="src/main/java"
type="XMLMAPPER"/>
<table tableName="user">
<generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>
</context>
</generatorConfiguration>
更多关于 generatorConfig.xml 配置相关的介绍,请参阅官方文档: http://mbg.cndocs.ml/running/running.html
使用 Java编码的方式运行 MBG
这里有两种方法可以运行Mybatis Generator插件,第一种是直接建立一个创建一个类,添加 main()方法,在主函数中执行。如下所示: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
27public class GeneratorDisplay {
public void generator() throws Exception{
List<String> warnings = new ArrayList<>();
boolean overwrite = true;
//指定 逆向工程配置文件
File configFile = new File("F:\\IDEAproject\\spring-boot-learn\\spring-boot-mybatis\\src\\main\\resources\\generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
callback, warnings);
myBatisGenerator.generate(null);
}
public static void main(String[] args) throws Exception {
try {
GeneratorDisplay generatorSqlmap = new GeneratorDisplay();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用Maven执行MBG
利用Maven来执行Mybatis Generator,首先在 pom.xml配置生成器插件:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.5.3</version>
</dependency>
</dependencies>
</plugin>
注意要在插件里面包含 通用Mapper版本和数据库连接依赖。接下来是运行该插件,在pom.xml所在目录的命令行窗口执行 mvn mybatis-generator:generator
。
生成的实体类
1 | public class User { |
Mapper接口
1 | import com.pjmike.mybatis.MyMapper; |
Mapper文件
1 | <?xml version="1.0" encoding="UTF-8" ?> |
从上面我们就可以看出 MBG 是非常方便的,它不需要我们去手动建立实体类,Mapper接口以及对应的XML配置文件,对于开发者来说非常友好,让我们省去了很多工作。
测试代码
1 | (SpringRunner.class) |
小结
mybatis是一个优秀的 ORM 框架,在开发中,配合通用Mapper,分页插件以及Mybatis Generator 插件使用,是一件非常 nice的事情,它将更加高效地帮助你开发。
源代码地址: https://github.com/pjmike/spring-boot-learn/tree/master/spring-boot-mybatis