1. 程式人生 > 其它 >不要再手寫實體類和Mapper了,使用MyBatis程式碼生成工具一鍵生成!

不要再手寫實體類和Mapper了,使用MyBatis程式碼生成工具一鍵生成!

技術標籤:mybatis資料庫javamybatismysql

目錄

MyBatis程式碼生成工具

在我們使用MyBatis的過程中,我們往往需要編寫實體類和單表CRUD程式碼,在表不多的時候,可能還好,但是一但表多了,那將會是一件相當麻煩的事情。幸運的是,MyBatis官方程式碼生成器(MyBatis Generator)可以幫助我們解決這個問題,MyBatis Generator(簡稱MBG)可以通過資料庫表直接生成實體類、單表CRUD程式碼、mapper.xml檔案。下面我們就來看一下如何使用MyBatis Generator。


使用MyBatis Generator

1、新增依賴

使用MBG,主要是以下兩個依賴,一個是mybatis的spring boot依賴和MyBatis Generator的依賴。如果你只是單純想用 MyBatis程式碼生成器,那麼甚至可以不用mybatis-spring-boot-starter依賴

    <!--SpringBoot整合MyBatis-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>
mybatis-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> <!-- MyBatis 生成器 --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <
version>
1.4.0</version> </dependency> <!--Mysql資料庫驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>

2、添加了依賴,我們就需要進行相關的配置

在application.yml中對資料來源和MyBatis的mapper.xml檔案路徑進行配置

#資料庫連線
spring.datasource.url=jdbc:mysql://192.168.91.128:3306/mytest?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#指定本地mapper.xml檔案的存放位置
mybatis.mapper-locations=classpath:dao/*.xml

3、在啟動類新增@MapperScan註解,指定掃描的路徑

路徑只要是包含你Mapper介面的路徑都可以,範圍越小,效率越高

@MapperScan("com.example.demo2")
public class Demo2Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo2Application.class, args);
    }

}

4、上面就配置好了mybatis,然後我們就可以在resources目錄下編寫程式碼生成器的xml配置檔案

下面是我編寫的一個程式碼生成器xml檔案

名稱為: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>
    <!--
        context:程式碼生成規則配置的上下文
            id:標識
            targetRuntime: MyBatis3Simple 只會生成基本的CRUD操作

    -->
    <context id="DB2Tables" targetRuntime="MyBatis3Simple">

        <!--commentGenerator:註釋生成策略-->
        <commentGenerator>
            <!--suppressAllComments:是否阻止註釋生成-->
            <property name="suppressAllComments" value="true"/>
            <!--suppressDate:是否阻止時間戳生成-->
            <property name="suppressDate" value="true"/>
        </commentGenerator>

        <!--jdbcConnection:資料庫的連結屬性-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/mytest?useUnicode=true&amp;characterEncoding=utf8"
                        userId="root"
                        password="root">
            <!--解決mysql驅動升級到8.0後不生成指定資料庫程式碼的問題-->
            <property name="nullCatalogMeansCurrent" value="true" />
        </jdbcConnection>

        <!--javaTypeResolver:java型別轉換策略-->
        <javaTypeResolver >
            <!-- forceBigDecimals
                 false:如果資料庫中的欄位型別為numeric或者decimal,在程式碼生成的時候根據資料庫中設定的長度自動選擇java型別進行轉換
                 true:直接使用java.math.BigDecimal型別-->
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!--domain生成策略;targetPackage:生成到哪個包下面,targetProject:生成到哪個專案目錄下面-->
        <javaModelGenerator targetPackage="com.example.childdemo.model" targetProject="src/main/java">
            <!--<property name="enableSubPackages" value="true" />-->
            <!--表示是否修剪字串(去掉空格-->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!--sqlMapGenerator:對映檔案生成策略
               targetPackage:生成到哪個包下面,targetProject:生成到哪個專案目錄下面
        -->
        <sqlMapGenerator targetPackage="com.example.childdemo.mapper"  targetProject="src/main/resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>

        <!--mapper介面生成策略
           type:ANNOTATEDMAPPER:註解的形式
                XMLMAPPER:xml對映的形式-->
        <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.example.childdemo.mapper"  targetProject="src/main/java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>

        <!--指定要生成程式碼的表
                domainObjectName:設定表對應的domain實體類生成的名稱
        -->
        <table tableName="productdir" domainObjectName="ProductDir"></table>

    </context>
</generatorConfiguration>`

5、執行程式碼生成器
下面我們通過編碼和配置檔案執行程式碼生成器

編寫好配置檔案之後,我們就可以寫個類用於生成程式碼,直接執行main方法即可生成所有程式碼,程式碼如下:

public class Generator {
    public static void main(String[] args) throws Exception {
        //MBG 執行過程中的警告資訊
        List<String> warnings = new ArrayList<String>();
        //當生成的程式碼重複時,覆蓋原始碼
        boolean overwrite = true;
        //讀取我們的 MBG 配置檔案
        InputStream is = Generator.class.getResourceAsStream("/generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(is);
        is.close();
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        //建立 MBG
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        //執行生成程式碼
        myBatisGenerator.generate(null);
        //輸出警告資訊
        for (String warning : warnings) {
            System.out.println(warning);
        }
    }

}

執行main方法,就會幫我們生成相應的實體類和mapper介面了


Maven外掛執行程式碼生成器

除了上面的方法,我們還可以通過Maven外掛執行程式碼生成器

如果使用Maven外掛,那麼不需要引入mybatis-generator-core依賴,只需要引入一個Maven的外掛mybatis-generator-maven-plugin即可,在pom檔案新增以下plugin:

             <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <!-- 輸出詳細資訊 -->
                    <verbose>true</verbose>
                    <!-- 覆蓋生成檔案 -->
                    <overwrite>true</overwrite>
                    <!-- 定義配置檔案 -->
                    <configurationFile>${basedir}/src/main/resources/generator-configuration.xml</configurationFile>
                </configuration>
                <executions>
                    <execution>
                        <id>MyBatis Generate</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>

                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.38</version>
                    </dependency>
                </dependencies>
            </plugin>

外掛配置完畢之後,使用下面的命令即可執行:

mvn mybatis-generator:generate

注意:外掛的版本要與連線資料庫的版本對應,否則會報錯

我們也可以在編譯器的maven選項直接執行,如下

在這裡插入圖片描述

執行後就可以得到相應的程式碼了,如下

在這裡插入圖片描述