前言
本篇博客旨在教学SpringBoot使用Mybatis逆向工程生成项目
环境配置:
MySQL 5.7.28
SpringBoot 2.3.1.RELEASE
数据库配置:
create database mysqltest;
use mysqltest;
create table t_user(
`id` int primary key auto_increment,
`username` varchar(30) not null unique,
`password` varchar(40) not null,
`email` varchar(50)
);
## 插入初始化测试数据
insert into t_user(`username`,`password`,`email`) values('admin','admin','admin@qq.com');
insert into t_user(`username`,`password`,`email`) values('wzg168','123456','admin@qq.com');
insert into t_user(`username`,`password`,`email`) values('admin168','123456','admin@qq.com');
insert into t_user(`username`,`password`,`email`) values('lisi','123456','admin@qq.com');
insert into t_user(`username`,`password`,`email`) values('wangwu','123456','admin@qq.com');
create table t_book(
`id` int primary key auto_increment,
`name` varchar(50),
`author` varchar(50),
`price` decimal(11,2),
`sales` int,
`stock` int
);
## 插入初始化测试数据
insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock` )
values(null , 'java从入门到放弃' , '国哥' , 80 , 9999 , 9);
insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock` )
values(null , '数据结构与算法' , '严敏君' , 78.5 , 6 , 13);
insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock` )
values(null , '怎样拐跑别人的媳妇' , '龙伍' , 68, 99999 , 52);
insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock` )
values(null , '木虚肉盖饭' , '小胖' , 16, 1000 , 50);
insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock` )
values(null , 'C++编程思想' , '刚哥' , 45.5 , 14 , 95);
insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock` )
values(null , '蛋炒饭' , '周星星' , 9.9, 12 , 53);
insert into t_book(`id` , `name` , `author` , `price` , `sales` , `stock` )
values(null , '赌神' , '龙伍' , 66.5, 125 , 535);
一、创建SpringBoot项目
创建好之后导入依赖如下:
<parent>
<artifactId>spring-boot-dependencies</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.3.1.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 逆向工程核心jar包 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<!-- 连接数据库的jar包,如果没有会报错 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 逆向工程的插件,没有的话会报错 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
二、创建子Module用于准备生成pojo和mapper文件
2.1 准备 Generator 模块
2.2 准备 BaseBean 模块
2.3 生成项目结构如下:
三、准备数据库连接的Properties文件和逆向工程文件
3.1 在Generator模块下的src/main/resources文件下创建 My.properties
和 MyBatis-Generate.xml
文件
3.2 My.properties文件如下:
可复制如下修改:
注:url后的?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
不可修改,如果好奇什么意思可自行百度
mybatis.datasource.url=jdbc:mysql://localhost:3306/mysqltest?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
mybatis.datasource.username=root
mybatis.datasource.password=zhanc
3.3 MyBatis-Generate.xml文件如下:
可复制如下修改:
注:下方中的module名字(属性 targetProject 后)视自己情况而定
<?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="My.properties"/>
<!--MyBatis可以生产两种版本
豪华版:除了CRUD还有大量的查询 targetRuntime="MyBatis3"
简单版:只有CRUD targetRuntime="MyBatis3Simple"
-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<!-- 去掉全部的注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--
修改数据库连接的属性信息
-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="${mybatis.datasource.url}"
userId="${mybatis.datasource.username}"
password="${mybatis.datasource.password}">
</jdbcConnection>
<!--是否启用 BigDecimal-->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!--JavaBean的生成配置
targetPackage 生成的类的包名
targetProject 生成的类在哪个模块目录下
-->
<javaModelGenerator targetPackage="com.zhanc.pojo"
targetProject=".\BaseBean\src\main\java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!--mapper.xml的生成配置
targetPackage 生成的配置文件在哪个包名下
targetProject 生成的文件在哪个模块目录下
-->
<sqlMapGenerator targetPackage="com.zhanc.mapper"
targetProject=".\BaseBean\src\main\resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!--mapper的生成配置
targetPackage 包名
targetProject 哪个模块目录下
-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.zhanc.mapper"
targetProject=".\BaseBean\src\main\java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!--
一个table标签表示一个表
tableName表示表名
domainObjectName表示生成的类名
-->
<table tableName="t_user" domainObjectName="User"/>
<table tableName="t_book" domainObjectName="Book"/>
</context>
</generatorConfiguration>
3.4 准备代码生成Pojo和Mapper
可复制如下修改:
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class MBGRunner {
public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//下一行中的是存放generator配置的路径,切记不要写错
File configFile = new File("Generator/src/main/resources/MyBatis-Generate.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);
}
}