SpringBoot 集成 Mybatis 8.x 配置Generator.xml
照着这个配置,不成功拿板砖拍我!!!
注意 我用的是 mysql 8.0 ,是和mysql5.x 不一样的配置,而且版本注意版本要统一
比如我之前用了generator的1.4.0 结果就报错,换成1.3.7才可以
1.创建SpringBoo项目,编写pom文件
项目结构如下
勾选mybatis、web、lombok、mysql等等插件
项目pom如下
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.jzj.thymeleaf</groupId>
<artifactId>firstweb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>firstweb</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- Mysql 配置-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--Mybatis 配置-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- tk-mybatis 及分页插件-->
<!--mybatis tk框架-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.2.4</version>
</dependency>
<!---分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<!-- lombok 配置-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!--Mybatis generator 映射文件自动生成-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<!--版本号一定要写,否则嘿嘿,之前1.4.0也会报错-->
<version>1.3.7</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
<!--Mybatis generator 配置文件 generatorCongig.xml 的路径-->
<configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>
</configuration>
<dependencies>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.创建generator
我的配置文件用的yml
所以我单独创建了一个db.properties来导入 db的基本配置如url、name、password等
在resources下新建 generotor文件夹
generotor文件夹中新建db.properties
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver
generotor文件夹中新建 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="generator/db.properties"/>
<context defaultModelType="flat" id="mysql" targetRuntime="MyBatis3Simple">
<!-- 生成的Java文件的编码 -->
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 生成根Mapper 所有的Mappwe都 继承这个 根 -->
<!-- 这个地方 注意一下 , 和你配置的 Application上面 MapperScan 的 mapper包扫描 不要再一个文件夹下,
比如我的 我的包扫描是 @MapperScan("com.jzj.tkdemo.dao") 这个地方是 其他的包
总而言之就是 BaseMapper 不要放在Mapper的 包扫描中, 具体原因看 下面介绍
-->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="com.jzj.thymeleaf.firstweb.repository.base.BaseMapper"/>
</plugin>
<jdbcConnection
driverClass="${spring.datasource.driver-class-name}"
connectionURL="${spring.datasource.url}"
userId="${spring.datasource.username}"
password="${spring.datasource.password}">
</jdbcConnection>
<!-- 生成的数据库实体 PO 所在位置 -->
<javaModelGenerator targetPackage="com.jzj.thymeleaf.firstweb.bean.po"
targetProject="src/main/java">
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- MAPPER XML java 文件所在位置-->
<sqlMapGenerator targetPackage="mapping"
targetProject="src/main/resources">
</sqlMapGenerator>
<!-- Mapper.java 所在的文件夹,也就是mapper接口 文件夹
1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
2,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
3.这个包是 com.jzj.tkdemo.dao 不要把上面的BaseMapper 放在下面 切记切记
-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.jzj.thymeleaf.firstweb.repository.mapper"
targetProject="src/main/java">
</javaClientGenerator>
<!-- user 是数据库表, UserPO 是你根据报表 要生成的 实体类-->
<table schema="" tableName="order" domainObjectName="OrderPO">
<generatedKey column="ID" sqlStatement="MySql" identity="true"/>
</table>
</context>
</generatorConfiguration>
3.修改application.yml配置文件
修改 application.yml
server:
port: 8088
spring:
application:
name: firstweb
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#mybatis存放位置
mybatis:
mapper-locations: classpath:mapping/*Mapper.xml
type-aliases-package: com.jzj.thymeleaf.firstweb.bean.po
configuration:
map-underscore-to-camel-case: true
logging:
level:
com:
jzj:
firstweb:
repository:
mapper: debug
4.新建BaseMapper 父类
所有的Mapper都集成BaseMapper.java
package com.jzj.thymeleaf.firstweb.repository.base;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
/**
* <tk通用mapper>.
*
* @author jiazijie
* @date 2020/02/04
* @since
*/
public interface BaseMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
5.新建测试Controller
package com.jzj.thymeleaf.firstweb.controller;
import com.jzj.thymeleaf.firstweb.bean.po.OrderPO;
import com.jzj.thymeleaf.firstweb.repository.mapper.OrderPOMapper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.thymeleaf.expression.Lists;
import javax.annotation.Resource;
import java.util.List;
@RestController
public class DbTestController {
@Resource
private OrderPOMapper orderMapper;
@GetMapping(value = "order")
public List<OrderPO> queryOrder(){
return orderMapper.selectAll();
}
}
6.用Maven plugin 生成generator
在数据库中新建表结构 order
CREATE TABLE `order` (
`id` int NOT NULL AUTO_INCREMENT,
`order_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
`order_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
`pay` int NOT NULL DEFAULT 0,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
注意我要生成的是order表,生成的实体是OrderPO结构,运行Maven的generator插件
自动生成OrderPOMapper.xml 、OrderPOMapper、OrderPO 等结构
7.启动Springboot
启动Springboot项目
访问 controller中的接口,成功查询出数据
E:\myworkspace\distribute\firstweb>curl 127.0.0.1:8088/order
[{"id":1,"orderName":"111","orderType":"food","pay":100},{"id":2,"orderName":"111","orderType":"food","pay":100},{"id":3,"orderName":"111","orderType":"food","pay":100},{"id":4,"orderName":"aaa","orderType":"food","pay":100},{"id":5,"orderName":"
bbb","orderType":"food","pay":100}]