Mybatis-Generator使用

钮瀚
2023-12-01

简介

在学习公司项目时看到公司有使用Mybatis-Generator,所以学习了一下

之前是有见识过Mybatis-Plusgenerator,使用起来还是很棒的,再说了Mybatis-Plus不也是基于Mybatis做的吗,所以相信他们会很相似

再有就是学习项目时用过renren-generator,他能生成项目中简单的业务代码,包括controller、service等等

内容

关于Mybatis-Generator最好还是去官网学习,http://mybatis.org/generator/index.html

当然有些博客写的也很棒,https://www.cnblogs.com/throwable/p/12046848.html

关于上面的那篇博客我只纠正一点,就是关于commentGenerator标签这块suppressAllComments,默认值是false没错,但是false含义是生成注释,设置为true才表示不生成注解。

代码

下面是我的一些代码,可以参考一下

主要是pom.xmlgeneratorConfig.xmlgeneratorConfig.properties

pom.xml

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wnh</groupId>
    <artifactId>mybatis-generator</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <spring.boot.version>2.2.2.RELEASE</spring.boot.version>
        <mysql.driver.version>8.0.17</mysql.driver.version>
        <mybatis.generator.version>1.4.0</mybatis.generator.version>
        <lombok.version>1.18.12</lombok.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring.boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.driver.version}</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>${mybatis.generator.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${spring.boot.version}</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>

        <plugins>
            <!-- 通过mvn mybatis-generator:generate命令,运行mybatis-generator -->
            <!-- 参考:https://mybatis.org/generator/running/runningWithMaven.html -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>${mybatis.generator.version}</version>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>

                    <!-- 定义配置文件 -->
                    <configurationFile>${basedir}/src/main/resources/mybatis/generatorConfig.xml</configurationFile>
                    <!-- 输出详细信息 -->
                    <verbose>true</verbose>
                    <!-- 覆盖生成文件 -->
                    <overwrite>true</overwrite>
                    <!-- 这里许多配置可以放在对应的xml文件中 -->

                </configuration>

                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>${mysql.driver.version}</version>
                    </dependency>

                </dependencies>
            </plugin>


        </plugins>

    </build>


</project>

generatorConfig.properties

datasource.driver=com.mysql.cj.jdbc.Driver
datasource.url=jdbc:mysql://localhost:3306/operation?useSSL=false
datasource.username=root
datasource.password=root

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

    <!-- 要添加到类路径的 JAR/ZIP 文件的完整路径名,或要添加到类路径的目录 -->
    <!-- 需要驱动:1、加入驱动路径 2、在plugin里直接加入依赖 -->
    <!-- <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip"/>-->

    <!-- targetRuntime属性推荐MyBatis3和MyBatis3Simple -->
    <!-- 必须按context的顺序配置 -->
    <context id="MySQL" targetRuntime="MyBatis3Simple">

        <!-- 插件扩展生成类,例如:生成toString,实现java.io.Serializable等 -->
        <!-- http://mybatis.org/generator/reference/plugins.html     https://github.com/itfsw/mybatis-generator-plugin -->
<!--        <plugin type="com.itfsw.mybatis.generator.plugins.LombokPlugin">-->
<!--            &lt;!&ndash; @Data 默认开启,同时插件会对子类自动附加@EqualsAndHashCode(callSuper = true),@ToString(callSuper = true) &ndash;&gt;-->
<!--            <property name="@Data" value="true"/>-->
<!--            &lt;!&ndash; @Builder 必须在 Lombok 版本 >= 1.18.2 的情况下开启,对存在继承关系的类自动替换成@SuperBuilder &ndash;&gt;-->
<!--            <property name="@Builder" value="false"/>-->
<!--            &lt;!&ndash; @NoArgsConstructor 和 @AllArgsConstructor 使用规则和Lombok一致 &ndash;&gt;-->
<!--            <property name="@AllArgsConstructor" value="false"/>-->
<!--            <property name="@NoArgsConstructor" value="false"/>-->
<!--            &lt;!&ndash; @Getter、@Setter、@Accessors 等使用规则参见官方文档 &ndash;&gt;-->
<!--            <property name="@Accessors(chain = true)" value="false"/>-->
<!--            &lt;!&ndash; 临时解决IDEA工具对@SuperBuilder的不支持问题,开启后(默认未开启)插件在遇到@SuperBuilder注解时会调用ModelBuilderPlugin来生成相应的builder代码 &ndash;&gt;-->
<!--            <property name="supportSuperBuilderForIdea" value="false"/>-->
<!--        </plugin>-->

        <!--覆盖生成XML文件-->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />



        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
            <!-- 是否输出表和列的comment信息 -->
            <property name="addRemarkComments" value="true"/>
        </commentGenerator>

        <!-- 数据源连接信息 -->
        <jdbcConnection
                driverClass="${datasource.driver}"
                connectionURL="${datasource.url}"
                userId="${datasource.username}"
                password="${datasource.password}">
        </jdbcConnection>

        <javaTypeResolver>
            <!-- 如果为true,所有数字属性被强制使用BigDecimal类型表示 -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 生成模型的包名和位置 -->
        <javaModelGenerator
                targetPackage="com.wnh.pojo.model"
                targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaModelGenerator>

        <!-- 生成的映射文件包名和位置 -->
        <sqlMapGenerator
                targetPackage="mybatis/mapper"
                targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>

        <!-- 生成DAO的包名和位置 -->
        <javaClientGenerator
                targetPackage="com.wnh.mapper"
                targetProject="src/main/java"
                type="XMLMAPPER">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>


<!--        <table tableName="school_area"-->
<!--               domainObjectName="SchoolArea"-->
<!--               enableCountByExample="false"-->
<!--               enableSelectByExample="false"-->
<!--               enableUpdateByExample="false"-->
<!--               enableDeleteByExample="false">-->
<!--            <generatedKey column="id" sqlStatement="JDBC" identity="true"/>-->
<!--        </table>-->

        <table tableName="user"
               domainObjectName="user.User"
               mapperName="user.UserMapper"
               enableCountByExample="false"
               enableSelectByExample="false"
               enableUpdateByExample="false"
               enableDeleteByExample="false">
            <generatedKey column="id" sqlStatement="JDBC" identity="true"/>
        </table>

    </context>
</generatorConfiguration>

注意事项

  • 虽然有Javamaven两种启动方式,但我还是推荐maven
  • 关于pom,要在plugin中引入需要的依赖,上面也提到了可以配置插件帮助我们生成代码,但官方提供的插件都太基础了,不太实用
  • 关于generatorConfig.xml,这里context标签里的要严格按照顺序配置,否则报错
  • 一定注意上面的覆盖xmlplugin配置,不然在覆盖生成时会有问题

吐槽

  • 首先就是关于注释的,Mybatis-Generator生成注释配置下,会生成很多多余的注解,其主要就是关于声明这里的代码是我们Mybatis-Generator生成的,但真的没什么用啊。有人就问了,“你不会把它关掉吗?”我要不是为了生成实体类对应数据库的注释我也不会开
  • 关于生成表这块,难道没有直接配置多个表的选项吗?非得对应数据库每个表写一个table标签吗?
  • 还有就是在生成文件时,它不会自己确定父包,也就是还得配置每个文件的父包,很麻烦

总结

说实话Mybatis-Generator确实能帮助我们简化开发,生成数据库实体类、mapper接口和xml,但是确实也存在一些问题,这也可能是因为它不更新了吧,上maven仓库就可以看到最新版本就是1.4.0,停留在2019年,现在确实也存在很多能替代它的方案。

 类似资料: