Mybatis-Generator使用

简介

在学习公司项目时看到公司有使用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年,现在确实也存在很多能替代它的方案。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容