Mybatis Generator 从零开始逆向工程

logo

构建环境

  • Idea 2021.1
  • Maven
  • Spring Boot
  • Mysql

Maven配置

<dependencies>
        <!--Spring BottMybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
        <!--Mybatis 逆向工程-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
	        <!--Mybatis 逆向工程 插件-->
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <!--指定代码生成的配置文件 可选,默认 generatorConfig.xml-->
                    <!--<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>-->
                    <verbose>true</verbose>
                    <!--允许覆盖生成的文件-->
                    <overwrite>true</overwrite>
                </configuration>
                <!--在此处引入mysql包之后,逆向工程就不需要配置 <classPathEntry> 了-->
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.18</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

至此,我们已经完成了Mybatis Generator逆向工程Maven的配置

配置逆向工程XML

首先在src/resources文件夹下创建generatorConfig.xml文件

1 添加头部

<?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>
    <!-- mybatis 逆向配置-->
</generatorConfiguration>

1.2 外部配置文件

1.2.1 创建配置

src/resources文件夹下创建datasource.properties

# datasource.properties
#mysql
db.driverClassName=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
db.username=root
db.password=123456
# mysql jar包路径
db.driverLocation=...
1.2.2 引入配置
<!-- src/resource/generatorConfig.xml -->
<properties resource="datasource.properties"/>

1.3 指定数据库jdbc驱动jar包classPathEntry

<!-- src/resource/generatorConfig.xml -->

<!--指定特定数据库的jdbc驱动jar包的位置-->
<!--如果已在Maven当中引入mysql则无需配置-->
<classPathEntry location="${db.driverLocation}"/>

1.4 编写context

<context>标签是用于设置生成一组对象的环境

<!-- src/resource/generatorConfig.xml -->

<!--
id: 标识符,用于在出错的时候提示
targetRuntime:
	1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;
	2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;
-->
<context id="default" targetRuntime="MyBatis3">
    
</context>
1.4.1 对注释进行控制commentGenerator

该标签主要用于控制生成java类mapper.xml文件后产生的注释

<!-- src/resource/generatorConfig.xml -->

<!--以下均为可选内容-->
<commentGenerator>
    <!--注释中不生成时间戳-->
	<property name="suppressDate" value="true"/>
    <!-- 添加 db 表中字段的注释 -->
    <property name="addRemarkComments" value="true"/>
    <!--是否不生成注释-->
	<property name="suppressAllComments" value="true"/>
</commentGenerator>
1.4.2 配置jdbc数据库连接 jdbcConnection

该标签为必填标签,主要用来连接数据库

<!-- src/resource/generatorConfig.xml -->

<jdbcConnection driverClass="${spring.datasource.driverClassName}"
    <!--这里注意 &符号要用 &amp; 代替,不然无法使用-->
                connectionURL="${spring.datasource.url}"
                userId="${spring.datasource.username}"
                password="${spring.datasource.password}">
    <!--高版本的 mysql-connector-java 需要设置 nullCatalogMeansCurrent=true-->
    <property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>

使用高版本MysqlnullCatalogMeansCurrent注意事项

1.4.3 类型处理器 javaTypeResolver

该标签为选填标签,主要是用来配置JDBC与java的类型转换,仅支持BigDecimal类型时间类型的转换

<!-- src/resource/generatorConfig.xml -->

<javaTypeResolver>
    <!--默认为false
		false: 把JDBC中 DECIMAL 和 NUMERIC 类型解析为 Integer
		true: 同上,只是解析为 java.math.BigDecimal-->
	<property name="forceBigDecimals" value="true"/>
    <!--默认为false
		false: 将JDBC中的时间类型解析为 java.util.Date
		true:将 JDBC 的时间类型按如下规则解析
            DATE	                -> java.time.LocalDate
            TIME	                -> java.time.LocalTime
            TIMESTAMP               -> java.time.LocalDateTime
            TIME_WITH_TIMEZONE  	-> java.time.OffsetTime
            TIMESTAMP_WITH_TIMEZONE	-> java.time.OffsetDateTime -->
    <property name="useJSR310Types" value="true"/>
</javaTypeResolver>
1.4.4 Java类模型生成器javaModelGenerator

该标签为必填标签,用来生成含有主键key的类

<!-- src/resource/generatorConfig.xml -->

<!--targetPackage     指定生成的model生成所在的包名,一般为pojo包
	targetProject     指定在该项目下所在的路径
-->
<javaModelGenerator targetPackage="com.ayou.pojo" targetProject="./src/main/java">
	<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
	<property name="enableSubPackages" value="false"/>
	<!-- 是否对model添加 构造函数 -->
	<property name="constructorBased" value="true"/>
	<!-- 是否对类CHAR类型的列的数据进行trim操作 -->
	<property name="trimStrings" value="true"/>
	<!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
	<property name="immutable" value="false"/>
</javaModelGenerator>
1.4.5 SQL map XML文件生成器sqlMapGenerator

该标签为必填标签,用来配置Mapper.xml文件生成的目录

<!-- src/resource/generatorConfig.xml -->

<sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources">
    <property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
1.4.6 Java接口Mapper类生成器javaClientGenerator

该标签为必填标签,主要用来生成针对Modal对象Mapper.xml配置文件的接口代码

<!-- src/resource/generatorConfig.xml -->

<!-- 
	type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
	type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
	type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.ayou.dao" targetProject="./src/main/java">
    <!-- enableSubPackages:是否让schema作为包的后缀,即再创建一层package,生成的类都放在这个package下-->
    <property name="enableSubPackages" value="false" />
</javaClientGenerator>
1.4.7 表 table

这个标签用于根据来生成对应的Modal对象Mapper对象,一个table对应一张,如果要生成多张表,需要配置多个table.

<!-- src/resource/generatorConfig.xml -->

<!-- schema为数据库名,oracle需要配置,mysql不需要配置。
     tableName为对应的数据库表名
     domainObjectName 是要生成的实体类名(可以不指定)
     enableXXXByExample 默认为 true,为 true 会生成一个对应Example帮助类,帮助你进行条件查询,不想要可以设为false
     -->
<table tableName="" domainObjectName=""
	enableCountByExample="false" enableUpdateByExample="false"
	enableDeleteByExample="false" enableSelectByExample="false"
	selectByExampleQueryId="false">
	<!--是否使用实际列名,默认为false-->
    <!--<property name="useActualColumnNames" value="false" />-->
</table>  

domainObjectName不配置时,他会按照帕斯卡命名法(驼峰)将表名转换成类名

enableXXXByExample默认为true,只在targetRuntime="MyBatis3"生效

targetRuntime="Mybatis3Simple",enableXXXByExample不管为true或者false都不生效

整体配置

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="datasource.properties"/>

    <!--指定特定数据库的jdbc驱动jar包的位置-->
    <!--如果已在Maven当中引入mysql则无需配置-->
    <!-- <classPathEntry location="${db.driverLocation}"/> -->

    <context id="default" targetRuntime="MyBatis3">
        <!--对注释进行控制 -->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

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

        <!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- Model模型生成器,用来生成含有主键key的类,记录类 以及查询Example类
            targetPackage     指定生成的model生成所在的包名
            targetProject     指定在该项目下所在的路径
        -->
        <javaModelGenerator targetPackage="路径" targetProject="./src/main/java">
            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否对model添加 构造函数 -->
            <property name="constructorBased" value="true"/>
            <!-- 是否对类CHAR类型的列的数据进行trim操作 -->
            <property name="trimStrings" value="true"/>
            <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>

        <!--mapper映射文件生成所在的目录 为每一个数据库的表生成对应的SqlMap文件 -->
        <sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- targetPackage:mapper接口dao生成的位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="路径" targetProject="./src/main/java">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>
    </context>
</generatorConfiguration>

datasource.properties

# datasource.properties
#mysql
db.driverClassName=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
db.username=root
db.password=123456
# mysql jar包路径
db.driverLocation=...

pom.xml (Maven)

    <dependencies>
        <!--Mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
        <!--Spring Boot Mybatis 逆向工程-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                <!--指定代码生成的配置文件 可选,默认 generatorConfig.xml-->
                <!--
				<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
				-->
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <!--配置mysql dependency后 generatorConfig.xml 无需配置 <classPathEntry> -->
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.18</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

运行 Mybatis Generator

方法一

使用Idea自带的Maven工具,双击mybatis-generator:generate运行(请保证已经重新加载Maven项目)
方法1

方法二

使用Maven命令,在根目录打开DOS控制台

mvn mybatis-generator:generate

build Success
出现以下内容表示构建成功,现在我们的项目里面已经有了相关Modal模型类Mapper.xml
在这里插入图片描述

Spring Boot 配置文件配置

mybatis:
  type-aliases-package: com.ayou.shopping.manager.pojo
  mapper-locations: classpath*:/mappers/*.xml

最后记得在 @SpringBootApplication注解下添加@MapperScan("Mapper路径")注解,用来扫描Mapper接口

参考资料

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐