Mybatis-Generator使用

簡介

在學(xué)習(xí)公司項目時看到公司有使用Mybatis-Generator,所以學(xué)習(xí)了一下

之前是有見識過Mybatis-Plusgenerator,使用起來還是很棒的,再說了Mybatis-Plus不也是基于Mybatis做的嗎,所以相信他們會很相似

再有就是學(xué)習(xí)項目時用過renren-generator,他能生成項目中簡單的業(yè)務(wù)代碼,包括controller、service等等

內(nèi)容

關(guān)于Mybatis-Generator最好還是去官網(wǎng)學(xué)習(xí),http://mybatis.org/generator/index.html

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

關(guān)于上面的那篇博客我只糾正一點,就是關(guān)于commentGenerator標簽這塊suppressAllComments,默認值是false沒錯,但是false含義是生成注釋,設(shè)置為true才表示不生成注解。

代碼

下面是我的一些代碼,可以參考一下

主要是pom.xml、generatorConfig.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>
                    <!-- 這里許多配置可以放在對應(yīng)的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 文件的完整路徑名,或要添加到類路徑的目錄 -->
    <!-- 需要驅(qū)動:1、加入驅(qū)動路徑 2、在plugin里直接加入依賴 -->
    <!-- <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip"/>-->

    <!-- targetRuntime屬性推薦MyBatis3和MyBatis3Simple -->
    <!-- 必須按context的順序配置 -->
    <context id="MySQL" targetRuntime="MyBatis3Simple">

        <!-- 插件擴展生成類,例如:生成toString,實現(xiàn)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 的情況下開啟,對存在繼承關(guān)系的類自動替換成@SuperBuilder &ndash;&gt;-->
<!--            <property name="@Builder" value="false"/>-->
<!--            &lt;!&ndash; @NoArgsConstructor 和 @AllArgsConstructor 使用規(guī)則和Lombok一致 &ndash;&gt;-->
<!--            <property name="@AllArgsConstructor" value="false"/>-->
<!--            <property name="@NoArgsConstructor" value="false"/>-->
<!--            &lt;!&ndash; @Getter、@Setter、@Accessors 等使用規(guī)則參見官方文檔 &ndash;&gt;-->
<!--            <property name="@Accessors(chain = true)" value="false"/>-->
<!--            &lt;!&ndash; 臨時解決IDEA工具對@SuperBuilder的不支持問題,開啟后(默認未開啟)插件在遇到@SuperBuilder注解時會調(diào)用ModelBuilderPlugin來生成相應(yīng)的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>

        <!-- 數(shù)據(jù)源連接信息 -->
        <jdbcConnection
                driverClass="${datasource.driver}"
                connectionURL="${datasource.url}"
                userId="${datasource.username}"
                password="${datasource.password}">
        </jdbcConnection>

        <javaTypeResolver>
            <!-- 如果為true,所有數(shù)字屬性被強制使用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
  • 關(guān)于pom,要在plugin中引入需要的依賴,上面也提到了可以配置插件幫助我們生成代碼,但官方提供的插件都太基礎(chǔ)了,不太實用
  • 關(guān)于generatorConfig.xml,這里context標簽里的要嚴格按照順序配置,否則報錯
  • 一定注意上面的覆蓋xmlplugin配置,不然在覆蓋生成時會有問題

吐槽

  • 首先就是關(guān)于注釋的,Mybatis-Generator生成注釋配置下,會生成很多多余的注解,其主要就是關(guān)于聲明這里的代碼是我們Mybatis-Generator生成的,但真的沒什么用啊。有人就問了,“你不會把它關(guān)掉嗎?”我要不是為了生成實體類對應(yīng)數(shù)據(jù)庫的注釋我也不會開
  • 關(guān)于生成表這塊,難道沒有直接配置多個表的選項嗎?非得對應(yīng)數(shù)據(jù)庫每個表寫一個table標簽嗎?
  • 還有就是在生成文件時,它不會自己確定父包,也就是還得配置每個文件的父包,很麻煩

總結(jié)

說實話Mybatis-Generator確實能幫助我們簡化開發(fā),生成數(shù)據(jù)庫實體類、mapper接口和xml,但是確實也存在一些問題,這也可能是因為它不更新了吧,上maven倉庫就可以看到最新版本就是1.4.0,停留在2019年,現(xiàn)在確實也存在很多能替代它的方案。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容