MyBatis是Java目前主流的ORM框架,在Spring Boot中使用MyBatis可以参考这篇文章:http://www.ityouknow.com/springboot/2016/11/06/spring-boot-mybatis.html

这篇文章来将介绍MyBatis Generator,(简称MBG,下文使用这个简称),该插件可以很方便的生成实体类、Mapper接口代码等,提高开发效率,它有点像.NET的EF框架中的DB First。另外,顺便介绍Spring Boot如何集成Swagger。


一、添加pom配置

(1)既然是像EF的DB First,那需要先建好数据库,可以先在MySQL中执行以下SQL脚本:

create database generatortest default character set utf8mb4 collate utf8mb4_unicode_ci;
use generatortest;
create user 'generatortest'@'localhost' identified by 'generatortest123';
grant all privileges on generatortest.* to 'generatortest'@'localhost';
flush privileges; CREATE TABLE `user`
(
id INT NOT NULL AUTO_INCREMENT COMMENT '用户ID',
user_name VARCHAR(50) NOT NULL COMMENT '用户名',
`password` VARCHAR(50) NOT NULL COMMENT '密码',
email VARCHAR(50) COMMENT '邮箱',
avatar VARCHAR(255) COMMENT '头像',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_time DATETIME NOT NULL COMMENT '更新时间',
deleted TINYINT(1) default 0 COMMENT '逻辑删除',
PRIMARY KEY (id)
);
ALTER TABLE `user` COMMENT '用户表'; CREATE TABLE role
(
id INT NOT NULL AUTO_INCREMENT COMMENT '角色ID',
role_name VARCHAR(50) NOT NULL COMMENT '角色名',
enabled TINYINT(1) default 1 NOT NULL COMMENT '有效标志',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_time DATETIME NOT NULL COMMENT '更新时间',
deleted TINYINT(1) default 0 NOT NULL COMMENT '逻辑删除',
PRIMARY KEY (id)
);
ALTER TABLE role COMMENT '角色表'; CREATE TABLE permission
(
id INT NOT NULL AUTO_INCREMENT COMMENT '权限ID',
permission_name VARCHAR(50) NOT NULL COMMENT '权限名称',
permission_value VARCHAR(200) NOT NULL COMMENT '权限值',
PRIMARY KEY (id)
);
ALTER TABLE permission COMMENT '权限表'; CREATE TABLE user_role
(
user_id INT NOT NULL COMMENT '用户ID',
role_id INT NOT NULL COMMENT '角色ID'
);
ALTER TABLE user_role COMMENT '用户角色关联表'; CREATE TABLE role_permission
(
role_id INT NOT NULL COMMENT '角色ID',
permission_id INT NOT NULL COMMENT '权限ID'
);
ALTER TABLE role_permission COMMENT '角色权限关联表';

(2)新建Maven项目,还不知道怎么用VS Code建Maven项目的可以参考这篇文章

(3)添加相关Maven文件:

        <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>

二、添加MyBatis Generator配置文件

(1)在application.properties文件中添加MySQL数据连接配置:

spring.datasource.url=jdbc:mysql://localhost:3306/generatortest?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=generatortest
spring.datasource.password=generatortest123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

(2)在src\main\resources目录下新建generatorConfig.xml配置文件,添加如下配置:

<?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>
<properties resource="application.properties"/>
<context id="MySqlContext" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!-- 当表名或者字段名为SQL关键字的时候,可以设置该属性为true,MBG会自动给表名或字段名添加**分隔符**。默认值为false -->
<property name="autoDelimitKeywords" value="true"/>
<!--可以使用``包括字段名,避免字段名与sql保留字冲突报错,默认值为双引号"""-->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 自动生成toString方法 -->
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
<!-- 为模型生成序列化方法-->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<commentGenerator>
<property name="suppressDate" value="true"/>
<!--<property name="suppressAllComments" value="true"/>-->
</commentGenerator>
<jdbcConnection driverClass="${spring.datasource.driver-class-name}"
connectionURL="${spring.datasource.url}"
userId="${spring.datasource.username}"
password="${spring.datasource.password}">
<!--解决mysql驱动升级到8.0后不生成指定数据库代码的问题-->
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<javaTypeResolver>
<property name="useJSR310Types" value="true"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="com.example.demo.model" targetProject="src/main/java"/>
<javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.demo.mapper" targetProject="src/main/java" />
<!-- 生成所有表 -->
<table tableName="%" >
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
</table>
</context>
</generatorConfiguration>

接下来分析generatorConfig.xml配置:

<properties> 元素

非必选元素,用于指定一个需要在配置中解析使用的外部属性文件。这里引入application.properties配置文件,下文<jdbcConnection> 元素用到;

<context > 元素

必选元素,可以有多个,用必选属性id区分;

targetRuntime属性:默认值为MyBatis3;

MyBatis3:MBG将生成与MyBatis 3.0及以上版本兼容的对象,以及与JSE 5.0及以上版本兼容的对象。同时生成“by example”方法,用于构建动态where字句;

MyBatis3Simple:比MyBatis3少生成“by example”方法;

defaultModelType属性:值为flat时,每一张表只生成一个实体类,这个实体类包含表中的所有字段;

<property> 元素

非必选元素,以下三个属性设置是针对MySQL数据库的:

        <!-- 当表名或者字段名为SQL关键字的时候,可以设置该属性为true,MBG会自动给表名或字段名添加**分隔符**。默认值为false -->

        <property name="autoDelimitKeywords" value="true"/>

        <!--可以使用``包括字段名,避免字段名与sql保留字冲突报错,默认值为双引号"""-->

        <property name="beginningDelimiter" value="`"/>

        <property name="endingDelimiter" value="`"/>

假设在Mysql数据库中有一个表名为user detail,中间是一个空格,这种情况下如果写出select * from user detail这样的语句,是会报错的;

Mysql中,一般会写成样子:select * from `user detail `

以上三个配置属性就是当表名或者字段名为SQL关键字时,自动加 ` 前后分隔符;

<plugin> 元素

非必选元素,用来定义一个插件。插件用于扩展或修改MBG代码生成器生成的代码;

<commentGenerator> 元素

非必选元素,最多配置一个;

suppressAllComments属性:值为true时,阻止生成注释,默认为false;

suppressDate属性:值为true时,阻止生成包含时间戳的注释,默认为false;

<jdbcConnection> 元素

必选元素,且只能有一个,用于指定数据库连接信息;

driverClass:必选属性,访问数据库的JDBC驱动程序的完全限定类名;

connectionURL:必选属性,访问数据库的JDBC连接URL;

userId:非必选属性,访问数据库的用户ID;

Password:非必选属性,访问数据库的密码;

<javaTypeResolver> 元素

非必选元素,最多配置一个,用于指定JDBC类型和Java类型如何转换;

useJSR310Types:当值为true时,会进行如下转换,其中java.time.LocalDateTime和.NET中的DateTime最为相似;

JDBC Type

Resolved Java Type

DATE

java.time.LocalDate

TIME

java.time.LocalTime

TIMESTAMP

java.time.LocalDateTime

<javaModelGenerator> 元素

必选元素,而且最多一个,用于控制生成的实体类;

targetPackage:必选属性,生成实体类存放的包名;

targetProject:必选属性,指定targetPackage路径,可以是绝对路径或相对路径;

<javaClientGenerator> 元素

非必选元素,最多配置一个,用于生成Mapper接口代码,不配置就不生成;

Type=” ANNOTATEDMAPPER”:生成基于注解的Mapper接口,不会有对应的XML映射文件;

Type=” XMLMAPPER”:所有的方法都在XML中,接口调用依赖XML文件;

targetPackage:必选属性,生成Mapper接口代码存放的包名;

targetProject:必选属性,指定targetPackage路径,可以是绝对路径或相对路径;

<table> 元素

必选元素,可以有多个,tableName="%"时生成所有表;

子元素<generatedKey>,可选元素,最多一个,用于指定自动生成主键的属性;

Column:必选属性,生成列的列名;

sqlStatement:必选属性,使用一个预定义的的值返回新的SQL语句;

Identity:可选属性,是否为唯一标志列,默认为false;


三、运行MBG

(1)在项目中创建Generator类,添加一个main方法,写上如下代码:

public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(
Generator.class.getResourceAsStream("/generatorConfig.xml"));
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}

(2)点击Run,可以看到生成的实体类和Mapper接口代码

生成代码结构


四、使用MBG生成的代码

(1)pom.xml中添加如下配置,然后保存;

        <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>2.0.0</version>
</dependency>

(2)编写控制器代码,调用MBG生成的Mapper接口代码

@RestController
public class UserController { @Autowired
private UserMapper userMapper; @RequestMapping(value = "/getUsers", method=RequestMethod.GET)
public List<User> getUsers() {
List<User> users=userMapper.selectAll();
return users;
} @RequestMapping(value = "/getUser/{id}", method=RequestMethod.GET)
public User getUser(@PathVariable("id") Integer id) {
User user=userMapper.selectByPrimaryKey(id);
return user;
} @RequestMapping(value = "/add", method=RequestMethod.POST)
public void save(@RequestBody User user) {
if(user.getCreateTime()==null)
user.setCreateTime(LocalDateTime.now(Clock.system(ZoneId.of("Asia/Shanghai"))));
if(user.getUpdateTime() == null)
user.setUpdateTime(LocalDateTime.now(Clock.system(ZoneId.of("Asia/Shanghai"))));
userMapper.insert(user);
} @RequestMapping(value = "/update", method=RequestMethod.PUT)
public void update(@RequestBody User user) {
userMapper.updateByPrimaryKey(user);
} @RequestMapping(value = "/delete/{id}", method=RequestMethod.DELETE)
public void delete(@PathVariable("id") Integer id) {
userMapper.deleteByPrimaryKey(id);
}
}

其中UserMapper通过注解@Autowired注入进来。

(3)在application.properties配置文件中加上:

mybatis.type-aliases-package=com.example.demo.model

(4)在启动类中添加对 mapper 包扫描@MapperScan


五、Spring Boot中集成Swagger,方便接口调用

(1)pom.xml中添加支持swagger的模块,然后保存。

        <dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>

(2)添加SwaggerConfig配置文件:

public class SwaggerConfig {

    @Bean
public Docket swaggerSpringMvcPlugin() {
return new Docket(DocumentationType.SWAGGER_2).select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).build();
}
}

(3)为每个接口添加@ApiOperation注解,如下:

@ApiOperation(value = "获取所有用户信息" ,  notes = "返回所有用户信息")

最后运行程序,浏览器打开:http://localhost:8080/swagger-ui.html


源码地址:https://github.com/Bingjian-Zhu/MybatisGeneatorDemo.git

Spring Boot使用MyBatis Generator、Swagger的更多相关文章

  1. Spring boot 、mybatis、swagger、c3p0、redis 和mongodb 整合

    文件路径:            添加依赖: <?xml version="1.0" encoding="UTF-8"?> <project ...

  2. Spring Boot 、mybatis 、swagger 和 c3p0 整合

    文件路径如下 添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  3. Spring boot 、mybatis 和 swagger 整合

    文件路径 添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  4. spring boot集成mybatis(3) - mybatis generator 配置

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  5. Spring Boot项目简单上手+swagger配置+项目发布(可能是史上最详细的)

    Spring Boot项目简单上手+swagger配置 1.项目实践 项目结构图 项目整体分为四部分:1.source code 2.sql-mapper 3.application.properti ...

  6. 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法

    spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...

  7. Spring Boot整合Mybatis完成级联一对多CRUD操作

    在关系型数据库中,随处可见表之间的连接,对级联的表进行增删改查也是程序员必备的基础技能.关于Spring Boot整合Mybatis在之前已经详细写过,不熟悉的可以回顾Spring Boot整合Myb ...

  8. Spring Boot 实战 —— MyBatis(注解版)使用方法

    原文链接: Spring Boot 实战 -- MyBatis(注解版)使用方法 简介 MyBatis 官网 是这么介绍它自己的: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过 ...

  9. spring boot集成mybatis(1)

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

随机推荐

  1. 亲串 (hdu 2203 KMP)

    亲串 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  2. DTFT、DFT、FFT

    对于一般的周期信号可以用一系列(有限个或者无穷多了)正弦波的叠加来表示.这些正弦波的频率都是某一个特定频率的倍数如5hz.2*5hz.3*5hz--(其中的 5hz 叫基频).这是傅立叶级数的思想.所 ...

  3. ORA-00600: internal error code, arguments: [4194], [53], [41], [], [], [], [], []

    真的不动,关闭同事开发测试IBM 3650server它直接关系到电源插头行??? 第二天加点重新启动之后oracle 打开报错ORA-00600: internal error code, argu ...

  4. 初步STL该容器适配器

    容器适配器 特点 容器一定的顺序来实现(让现有的以集装箱堆放/式工作) 分类 1) stack: 头文件 <stack> • 栈 -- 后进先出 2) queue: 头文件 <que ...

  5. UVA 10869 - Brownie Points II(树阵)

    UVA 10869 - Brownie Points II 题目链接 题意:平面上n个点,两个人,第一个人先选一条经过点的垂直x轴的线.然后还有一个人在这条线上穿过的点选一点作垂直该直线的线,然后划分 ...

  6. 【iOS发展-89】UIGestureRecognizer完整的旋转手势识别、缩放和拖拽等效果

    (1)效果 (2)代码 http://download.csdn.net/detail/wsb200514/8261001 (3)总结 --先依据所需创建不同类型的手势识别.比方: UITapGest ...

  7. Java数据结构和算法的数组

    阵列的功能: 1.固定大小 2.相同的数据类型 3. 4.数据项可反复 Java数据类型:基本类型(int和double)和对象类型.在很多编程语言中.数组也是基本类型.但在Java中把它们当作对象来 ...

  8. [GEiv]第七章:着色器 高效GPU渲染方案

    第七章:着色器 高效GPU渲染方案 本章介绍着色器的基本知识以及Geiv下对其提供的支持接口.并以"渐变高斯模糊"为线索进行实例的演示解说. [背景信息] [计算机中央处理器的局限 ...

  9. Binding的详细说明

    <DataGridTextColumn Width="*" Header=" 组合规则名称 " Binding="{Binding ComRul ...

  10. js错误界面

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...