jck28 - 小柒 - 后端架构优化设计 - spring boot 自动生成数据库相关代码模版

一,导入 MyBatisGenerator依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <!-- mysql连接 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>
        <!--mybatis坐标-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <!--插件设置-->
                <configuration>
                    <!--允许移动生成的文件-->
                    <verbose>true</verbose>
                    <!--启用覆盖-->
                    <overwrite>true</overwrite>
                    <!--自动生成配置 如果名字是generatorConfig.xml可以省略配置-->
                    <configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.29</version>
                        <scope>runtime</scope>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.1.5</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

二,新增generator/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>
    <!--执行generator插件生成文件的命令: call mvn mybatis-generator:generate -e -->
    <!-- 引入配置文件 -->
    <properties resource="generator/config.properties"/>
    <!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 可选 -->
    <!--    <classPathEntry location="${jdbc.jar.path}"/>-->

    <!-- 一个数据库一个context 配置对象环境-->
    <!--    id="MysqlTable" :此上下文的唯一标识符。此值将用于一些错误消息。
    targetRuntime="MyBatis3Simple":为了避免生成Example相关的代码和方法。如果需要则改为Mybatis3
     defaultModelType="flat" :每个表只生成一个实体类    -->
    <context id="MysqlTable" targetRuntime="MyBatis3Simple" defaultModelType="flat">

        <!-- 配置起始与结束标识符 指明数据库的用于标记数据库对象名的符号-->
        <!-- ORACLE就是双引号,MYSQL默认是`反引号  数据库使用mysql,所以前后的分隔符都设为”`”-->
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <!--用来定义一个插件,用于扩展或者修改MBG生成的代码,不常用,可以配置0个或者多个,个数不受限制。
        只有一个Type标签,其中填插件的全限定名。
        常用的有缓存插件,序列化插件,RowBounds插件,ToString插件等。-->
        <plugin type="${mapper.plugin}">
            <property name="mappers" value="${mapper.Mapper}"/>
        </plugin>

        <!--数据库连接配置-->
        <jdbcConnection driverClass="${jdbc.driver}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.username}"
                        password="${jdbc.password}">
        </jdbcConnection>

        <!-- javaModelGenerator - 配置生成的实体类位置 type使用XMLMAPPER,会使接口和XML完全分离。
            targetPackage:放置生成的类的包。 MyBatis Generator 将根据需要为生成的包创建文件夹
            targetProject:包所在的project下的位置,指定了将保存对象的项目和源文件夹。该目录不存在,MyBatis Generator 将不会创建该目录        -->
        <javaModelGenerator targetPackage="${java.targetPackage}" targetProject="${java.targetProject}">
            <!-- 设置一个根对象,如果设置了这个根对象,那么生成的keyClass或者recordClass会继承这个类;
            在Table的rootClass属性中可以覆盖该选项
            注意:如果在key class或者record class中有root class相同的属性,MBG就不会重新生成这些属性了,
            包括:1,属性名相同,类型相同,有相同的getter/setter方法;
            rootClass:所有实体类的父类,如果父类定义了一些字段以及对应的getter、setter方法,那么实体类中就不会再生成。必须要类的安全限定名,如com.momo.test.BasePo         -->
            <property name="rootClass"
                      value="${java.rootClass}"/>
        </javaModelGenerator>

        <!-- sqlMapGenerator:配置SQL映射生成器(Mapper.xml文件)的属性,可选且最多配置1个  配置映射位置只有两个必选属性(和实体类的差不多):
                targetPackage:生成映射文件存放的包名,可能会受到其他配置的影响。
                targetProject:指定目标targetPackage的项目路径,可以用相对路径或者绝对路径        -->
        <sqlMapGenerator targetPackage="${mapper.targetPackage}" targetProject="${mapper.targetProject}"/>
        <!-- 配置接口位置
            typetype="XMLMAPPER":接口和XML完全分离;所有方法都在XML中,接口用依赖Xml文件
            targetPackage:生成Mapper文件存放的包名,可能会受到其他配置的影响。
            targetProject:指定目标targetPackage的项目路径,可以用相对路径        -->
        <javaClientGenerator targetPackage="${java.targetMapperPackage}" targetProject="${java.targetProject}"
                             type="XMLMAPPER"/>

        <!-- table可以有多个,每个数据库中的表都可以写一个table,schema是数据库名,
        tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 -->
        <!-- 配置数据库表 -->
        <table schema="advert" tableName="ads_search_group_premium_kw">
            <!-- generatedKey:用来指定自动生成的主键的属性。针对MySql,SQL Server等自增类型主键
                   indetity:设置为true时会被标记为indentity列,并且selectKey标签会被插入在Insert标签(order=AFTER)。
                   设置为false时selectKey会插入到Insert之前(oracal序列),默认为false.            -->
            <generatedKey column="kw_package_id" sqlStatement="Mysql" identity="true"/>
        </table>

        <!-- 生成用户的相关类 -->
        <!--        <table schema="aitest_mini" tableName="hogwarts_test_user" domainObjectName="HogwartsTestUser" enableCountByExample="false" enableDeleteByExample="false"-->
        <!--               enableSelectByExample="false" enableUpdateByExample="false" >-->
        <!--            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>-->
        <!--        </table>-->
    </context>
</generatorConfiguration>

三,新增config.properties文件

# 数据库配置
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://10.52.46.11:33066
jdbc.username=mysql
jdbc.password=123456

# 通用Mapper配置
mapper.plugin=tk.mybatis.mapper.generator.MapperPlugin
mapper.Mapper=com.ceshiren.common.MySqlExtensionMapper

#entity类和实体类的位置
java.targetProject=src/main/java
#实体类的包名
java.targetPackage=com.ceshiren.entity
#实体类的根包名
java.rootClass=com.ceshiren.entity.BaseEntityNew

#mapperXML文件路径
mapper.targetPackage=mapper
#mapper.xml位置
mapper.targetProject=src/main/resources

#entity类的包名
java.targetMapperPackage=com.ceshiren

四,新增对应报错的文件

MySqlExtensionMapper

package com.ceshiren.common;

import tk.mybatis.mapper.common.IdsMapper;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

public interface MySqlExtensionMapper<T> extends Mapper<T>, MySqlMapper<T>, IdsMapper<T> {
}

BaseEntityNew

package com.ceshiren.entity;

import java.io.Serializable;

public class BaseEntityNew implements Serializable {
    private static final long serialVersionUID = 2054813493011812469L;
}

五,执行插件语句,生成对应的文件