欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis代碼生成器Mybatis Generator(MBG)實戰(zhàn)詳解

 更新時間:2023年05月16日 11:30:08   作者:天罡gg  
本文我們主要實戰(zhàn)Mybatis官方的代碼生成器:Mybatis Generator(MBG),掌握它以后,可以簡化大部分手寫代碼,我們只需要寫復雜邏輯代碼,需要的朋友可以參考下

前言

本文我們主要實戰(zhàn)Mybatis官方的代碼生成器:Mybatis Generator(MBG),掌握它以后,可以簡化大部分手寫代碼,我們只需要寫復雜邏輯代碼!

我們掌握了在SpringBoot下Mybatis的基本用法操作步驟回顧一下:

  • 創(chuàng)建與MySQL表對應的Java PO對象,字段一一對應;
  • 創(chuàng)建Mapper接口,和對應的XML映射文件(或注解)。

在實際開發(fā)中,你會發(fā)現(xiàn)有很多重復的工作:

  • 首先是PO對象,我們往往創(chuàng)建與數(shù)據(jù)庫表字段一一對應的PO對象;
  • 其次在Mapper里,通常都會寫基本的增刪改查代碼。

重復不符合我們程序員的風格:

  • 其實對于PO對象,只需要讀取數(shù)據(jù)庫表字段,然后做SQL列類型與Java字段類型轉(zhuǎn)換,再將列名轉(zhuǎn)成駱駝命名就可以實現(xiàn),所以能實現(xiàn)的代碼生成器也非常多!
  • 再者對于單表的基本增刪改查是ORM的基本功能,像JPA對單表的基本增刪改查都進行了封裝!那么在Mybatis里,這些當然也不在話下,Mybatis官方為我們提供了非常好用的代碼生成器:Mybatis Generator (MBG) 。

本文就帶大家實戰(zhàn)一下Mybatis Generator,用它生成實戰(zhàn)項目全部表的PO對象和基本增刪改查代碼!

一、Mybatis Generator簡介

Mybatis Generator(MBG)是Mybatis官方提供的一個代碼生成工具,它可以根據(jù)數(shù)據(jù)庫表自動生成對應的Java Model、Mapper和XML文件,甚至還可以生成一些高級查詢功能,使用Mybatis-Generator可以大大降低開發(fā)者的工作量,提高開發(fā)效率!

支持使用Maven插件生成,也支持編寫Java代碼生成,還有命令行等等多種方式!
支持生成XML映射文件風格的代碼,也支持生成全注解風格的代碼!

二、Maven插件運行方式

首先在工程tg-book-dal的pom.xml中,根節(jié)點project下添加build節(jié)點,如下:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.7</version>
            <configuration>
                <verbose>true</verbose>
                <overwrite>true</overwrite>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.21</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

然后刷新tg-book-dal的Maven依賴,你就能看到mybatis-generator插件了,如下圖:

在這里插入圖片描述

注意,這時生成時會報錯,因為我們還需要添加配置文件,接著向下看.

三、生成配置 generatorConfig.xml

在tg-book-dal 的 src/main/resources 下 添加配置文件: generatorConfig.xml ,用于配置生成風格,數(shù)據(jù)庫連接、生成代碼包路徑、生成哪些表等等,各配置參數(shù)詳解參考注釋:
注意:==我增加了幾個實用的可選配置,像生成時覆蓋原文件、去除注釋、自增主鍵列、columnOverride ==

<!DOCTYPE generatorConfiguration PUBLIC
        "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- MyBatis3Simple風格 -->
    <context id="simple" targetRuntime="MyBatis3Simple">

        <property name="javaFileEncoding" value="UTF-8"/>
        <!--生成mapper.xml時覆蓋原文件-->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

        <commentGenerator>
            <!-- 是否去除自動生成的注釋 true:是 : false:否。 自動生成注釋太啰嗦,可以編碼擴展CommentGenerator -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!-- 數(shù)據(jù)庫連接 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/db_book?useUnicode=true&amp;characterEncoding=utf8&amp;tinyInt1isBit=true&amp;serverTimezone=UTC"
                        userId="root" password="root">
            <!-- 設(shè)置為true就只讀取db_book下的表, 否則會優(yōu)先讀取到mysql的user表  -->
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>

        <!-- 生成PO的包名和位置 -->
        <javaModelGenerator targetPackage="org.tg.book.dal.po.mbg" targetProject="src/main/java"/>

        <!-- 生成XML映射文件的包名和位置 -->
        <sqlMapGenerator targetPackage="org.tg.book.dal.mapper.mbg" targetProject="src/main/resources"/>

        <!-- 生成Mapper接口的包名和位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="org.tg.book.dal.mapper.mbg" targetProject="src/main/java"/>

        <!-- 要生成對應表配置 -->
        <table tableName="user" domainObjectName="User" >
            <!-- 自增主鍵列 -->
            <generatedKey column="id" sqlStatement="MYSQL" identity="true"/>
            <!-- tinyint映射為Integer -->
            <columnOverride column="role" javaType="Integer" jdbcType="TINYINT"/>
        </table>
    </context>
</generatorConfiguration>

MyBatis3Simple風格

上面配置的是MyBatis3Simple風格,只配置了一個表:user,雙擊插件的mybatis-generator:generate以后,生成的代碼如下:

在這里插入圖片描述

MyBatis3Simple風格生成的代碼比較精簡,看一看UserMapper的接口方法,只有基本的增刪改查方法:

public interface UserMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(User record);

    User selectByPrimaryKey(Integer id);

    List<User> selectAll();

    int updateByPrimaryKey(User record);
}

MyBatis3風格

我們再看看MyBatis3風格,只需要將 targetRuntime=“MyBatis3Simple” 修改為 targetRuntime=“MyBatis3”,然后再雙擊插件的mybatis-generator:generate,就可以看到增加了 “by example” 和 “selective” 方法

在這里插入圖片描述

  • selective方法:選擇性插入或更新,判斷PO字段不為空才插入或修改。在只需要插入或修改個別字段值時使用,對應生成的SQL不包括=null的字段,但同樣也需要注意,你無法用它將字段設(shè)置為null。 ??
  • by example方法:這個東西有點小強大,可以動態(tài)生成各種查詢條件,在后面的接口開發(fā)實戰(zhàn)中我們再使用。但就是生成的代碼有點多,沒有實現(xiàn)example代碼的復用。對于單表復雜查詢喜歡直接SQL的,可以禁用生成example,可以通過table節(jié)點的如下配置來指定是否啟用。
屬性說明
enableSelectByExample是否啟用生成selectByExample
enableDeleteByExample是否啟用生成deleteByExample
enableCountByExample是否啟用生成countByExample
enableUpdateByExample是否啟用生成updateByExample和updateByExampleSelective

MyBatis3DynamicSql風格

只需要將 targetRuntime=“MyBatis3” 修改為 targetRuntime=“MyBatis3DynamicSql”。
生成的代碼是全注解風格的,也就不會生成UserMapper.xml和UserExample類,而是新生成了UserDynamicSqlSupport類。

需要增加mybatis-dynamic-sql依賴包:

<!--mybatis-dynamic-sql-->
<dependency>
    <groupId>org.mybatis.dynamic-sql</groupId>
    <artifactId>mybatis-dynamic-sql</artifactId>
    <version>1.1.4</version>
</dependency>

四、Java代碼運行方式

除了使用插件運行方式來生成,我們還可以以Java代碼方式運行,添加mybatis-generator-core依賴包,如下:

<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.7</version>
</dependency>

添加main方法,如下:

package org.tg.book.dal;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class MybatisGeneratorRunner {
    public static void main(String[] args) throws XMLParserException, IOException, InvalidConfigurationException, SQLException, InterruptedException {
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        // 使用xml配置文件的方式
        File configFile = new File(MybatisGeneratorRunner.class.getClassLoader().getResource("generatorConfig.xml").getPath());
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        // 使用純Java代碼配置的方式, 相當于把 generatorConfig.xml配置的都用java代碼配置到config中
        // config = new Configuration();

        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
        System.out.println(warnings);
    }
}

注意:我執(zhí)行后生成到父項目下了??,需要修改generatorConfig.xmltargetProject加上項目名稱,如下:

<!-- 生成PO的包名和位置 -->
<javaModelGenerator targetPackage="org.tg.book.dal.po.mbg" targetProject="tg-book-dal/src/main/java"/>

<!-- 生成XML映射文件的包名和位置 -->
<sqlMapGenerator targetPackage="org.tg.book.dal.mapper.mbg" targetProject="tg-book-dal/src/main/resources"/>

<!-- 生成Mapper接口的包名和位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="org.tg.book.dal.mapper.mbg" targetProject="tg-book-dal/src/main/java"/>

targetProject加上tg-book-dal以后用插件生成,又提示目錄找不到,汗(⊙﹏⊙)b

[WARNING] The specified target project directory tg-book-dal/src/main/resources does not exist
[WARNING] The specified target project directory tg-book-dal/src/main/java does not exist
[WARNING] The specified target project directory tg-book-dal/src/main/java does not exist
[WARNING] The specified target project directory tg-book-dal/src/main/java does not exist

五、MGB生成全部表

一共8張表,主要注意點

  • generatedKey:配置自增id
  • columnOverride:指定tinyint列映射到Java類型是Integer還是Boolean

除了user的另外7張表配置:

<table tableName="book" domainObjectName="Book" >
    <generatedKey column="id" sqlStatement="MYSQL" identity="true"/>
    <columnOverride column="status" javaType="Integer" jdbcType="TINYINT"/>
    <columnOverride column="is_recommend" javaType="Boolean" jdbcType="TINYINT"/>
</table>
<table tableName="book_borrowing" domainObjectName="BookBorrowing" >
    <generatedKey column="id" sqlStatement="MYSQL" identity="true"/>
    <columnOverride column="status" javaType="Integer" jdbcType="TINYINT"/>
</table>
<table tableName="book_comment" domainObjectName="BookComment" >
    <generatedKey column="id" sqlStatement="MYSQL" identity="true"/>
    <columnOverride column="score" javaType="Integer" jdbcType="TINYINT"/>
</table>
<table tableName="book_favorite" domainObjectName="BookFavorite" >
    <generatedKey column="id" sqlStatement="MYSQL" identity="true"/>
    <columnOverride column="is_cancelled" javaType="Boolean" jdbcType="TINYINT"/>
</table>
<table tableName="notice" domainObjectName="Notice" >
    <generatedKey column="id" sqlStatement="MYSQL" identity="true"/>
    <columnOverride column="is_deleted" javaType="Boolean" jdbcType="TINYINT"/>
</table>
<table tableName="qualification" domainObjectName="Qualification" >
    <generatedKey column="id" sqlStatement="MYSQL" identity="true"/>
    <columnOverride column="status" javaType="Integer" jdbcType="TINYINT"/>
</table>
<table tableName="student" domainObjectName="Student" >
    <generatedKey column="id" sqlStatement="MYSQL" identity="true"/>
    <columnOverride column="is_approved" javaType="Boolean" jdbcType="TINYINT"/>
    <columnOverride column="is_frozen" javaType="Boolean" jdbcType="TINYINT"/>
</table>

六、增加Ext包

mbg包的代碼我們不做任何修改,為了便于區(qū)分,我們將自定義的PO和Mapper單獨放到ext包下,命名以Ext結(jié)尾。

  • 原來的UserMapper修改為UserMapperExt
  • 刪除原來的BookMapper和BookMapperImpl,用MBG生成的BookMapper替代,原來引用的關(guān)聯(lián)代碼都修改一下
  • 刪除原來的PO對象:User和Book,用MBG生成的User和Book替代,原來引用的關(guān)聯(lián)代碼都修改一下
  • AuthServiceImpl、BookServiceImpl、UserServiceImpl都有修改的點

最終結(jié)構(gòu)dal的 mapper和po包,如下:

在這里插入圖片描述

最終的mapper XML映射文件,如下:

在這里插入圖片描述

七、Git提交

養(yǎng)成好習慣,一步一提交!

在這里插入圖片描述

總結(jié)

本文主要介紹了Mybatis Generator (MBG)生成代碼的2種生成方式(當然還支持其它方式):

  • Maven插件方式
  • Java代碼方式

以及generatorConfig.xml配置的3種生成風格

  • MyBatis3Simple風格
  • MyBatis3風格
  • MyBatis3DynamicSql風格

以上就是Mybatis代碼生成器Mybatis Generator(MBG)實戰(zhàn)詳解的詳細內(nèi)容,更多關(guān)于Mybatis代碼生成器Mybatis Generator的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MyBatis #{}和${} |與數(shù)據(jù)庫連接池使用詳解

    MyBatis #{}和${} |與數(shù)據(jù)庫連接池使用詳解

    本文將為大家說說關(guān)于 #{} 和 ${},這個是 MyBatis 在面試中最常問的面試題,以及數(shù)據(jù)庫連接池相關(guān)的知識,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • Spring Cloud @RefreshScope 原理及使用

    Spring Cloud @RefreshScope 原理及使用

    這篇文章主要介紹了Spring Cloud @RefreshScope 原理及使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • Callable實現(xiàn)多線程步驟詳解

    Callable實現(xiàn)多線程步驟詳解

    這篇文章主要介紹了Callable實現(xiàn)多線程步驟詳解,Callable是一個接口,用于實現(xiàn)多線程,與實現(xiàn)Runnable類似,但是功能更強大,該方法可以在任務(wù)結(jié)束后提供一個返回值,需要的朋友可以參考下
    2023-10-10
  • 一篇看懂Java中的Unsafe類

    一篇看懂Java中的Unsafe類

    在閱讀AtomicInteger的源碼時,看到了這個類:sum.msic.Unsafe,之前從沒見過。所以花了點時間研究了下,下面這篇文章主要給大家介紹了關(guān)于Java中Unsafe類的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起學習學習吧
    2018-05-05
  • 詳解SpringMVC組件之HandlerMapping(二)

    詳解SpringMVC組件之HandlerMapping(二)

    這篇文章主要介紹了詳解SpringMVC組件之HandlerMapping(二),HandlerMapping組件是Spring?MVC核心組件,用來根據(jù)請求的request查找對應的Handler,在Spring?MVC中,有各式各樣的Web請求,每個請求都需要一個對應的Handler來處理,需要的朋友可以參考下
    2023-08-08
  • Java Servlet3.0異步處理問題

    Java Servlet3.0異步處理問題

    這篇文章主要介紹了Java中Servlet3.0異步處理的原理以及遇到的問題分析,需要的朋友參考一下。
    2017-12-12
  • springboot 使用yml配置文件給靜態(tài)變量賦值教程

    springboot 使用yml配置文件給靜態(tài)變量賦值教程

    這篇文章主要介紹了springboot 使用yml配置文件給靜態(tài)變量賦值教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Spring Date jpa 獲取最新一條數(shù)據(jù)的實例代碼

    Spring Date jpa 獲取最新一條數(shù)據(jù)的實例代碼

    這篇文章主要介紹了Spring Date jpa 獲取最新一條數(shù)據(jù)的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 在java中調(diào)用python腳本的三種方法

    在java中調(diào)用python腳本的三種方法

    實際工程項目中可能會用到Java和python兩種語言結(jié)合進行,這樣就會涉及到一個問題,就是怎么用Java程序來調(diào)用已經(jīng)寫好的python腳本呢,這篇文章主要給大家介紹了關(guān)于在java中調(diào)用python腳本的三種方法,需要的朋友可以參考下
    2023-09-09
  • JavaWeb評論功能實現(xiàn)步驟以及代碼實例

    JavaWeb評論功能實現(xiàn)步驟以及代碼實例

    項目初始版本上線,有時間寫點東西記錄一下項目中的心得體會,通過這個項目學習了很多,要寫下來的有很多,先從評論功能開始吧,下面這篇文章主要給大家介紹了關(guān)于JavaWeb評論功能實現(xiàn)步驟以及代碼的相關(guān)資料,需要的朋友可以參考下
    2023-01-01

最新評論