最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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字段類型轉換,再將列名轉成駱駝命名就可以實現(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">
            <!-- 設置為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的字段,但同樣也需要注意,你無法用它將字段設置為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結尾。

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

最終結構dal的 mapper和po包,如下:

在這里插入圖片描述

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

在這里插入圖片描述

七、Git提交

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

在這里插入圖片描述

總結

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

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

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

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

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

相關文章

  • Spring?Boot集成JasperReport生成文檔的方法

    Spring?Boot集成JasperReport生成文檔的方法

    由于工作需要,要實現(xiàn)后端根據(jù)模板動態(tài)填充數(shù)據(jù)生成PDF文檔,通過技術選型,使用Ireport5.6來設計模板,結合JasperReports5.6工具庫來調用渲染生成PDF文檔,這篇文章主要介紹了Spring?Boot集成JasperReport生成文檔,需要的朋友可以參考下
    2023-09-09
  • java與c#的語法區(qū)別詳細介紹

    java與c#的語法區(qū)別詳細介紹

    由C#轉入Java一段時間了,總結下個人認為的Java同C#語法之間的不同之處,有不同意見之處還望各位海涵,剛學Java時覺得語法同C#大致是相同的(應該說C#同Java大致相同
    2012-11-11
  • maven如何打包動態(tài)環(huán)境變量(包括啟動腳本)

    maven如何打包動態(tài)環(huán)境變量(包括啟動腳本)

    這篇文章主要介紹了maven如何打包動態(tài)環(huán)境變量(包括啟動腳本)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot使用Jsp的示例代碼

    SpringBoot使用Jsp的示例代碼

    這篇文章主要介紹了SpringBoot使用Jsp的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • MyBatisPlus3如何向數(shù)據(jù)庫中存入List

    MyBatisPlus3如何向數(shù)據(jù)庫中存入List

    本文主要介紹了Mybatis Plus的類型處理器的使用,通過User.java和UserMapper.xml示例進行詳細的解析,并提供了JSON解析器的使用方法,希望通過這篇文章,可以幫助大家更好的理解和掌握Mybatis Plus的類型處理器
    2024-10-10
  • java 文件和byte互轉的實例

    java 文件和byte互轉的實例

    下面小編就為大家分享一篇java 文件和byte互轉的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • Java class文件格式之常量池_動力節(jié)點Java學院整理

    Java class文件格式之常量池_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了Java class文件格式之常量池的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 在idea中顯示springboot面板的方法

    在idea中顯示springboot面板的方法

    這篇文章主要介紹了在idea中顯示springboot面板的方法方便啟動調試,本文通過代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Java httpcomponents發(fā)送get post請求代碼實例

    Java httpcomponents發(fā)送get post請求代碼實例

    這篇文章主要介紹了Java httpcomponents發(fā)送get post請求代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Java中API的使用方法詳情

    Java中API的使用方法詳情

    這篇文章主要介紹了Java中API的使用方法詳情,指的就是?JDK?中提供的各種功能的?Java類,這些類將底層的實現(xiàn)封裝了起來,我們不需要關心這些類是如何實現(xiàn)的,只需要學習這些類如何使用即可,我們可以通過幫助文檔來學習這些API如何使用,需要的朋友可以參考下
    2022-04-04

最新評論

高雄县| 青海省| 泰安市| 彭泽县| 海兴县| 古田县| 浦城县| 洞头县| 辽中县| 临沧市| 兴业县| 马边| 淄博市| 南木林县| 台南县| 民丰县| 杭州市| 石狮市| 沈丘县| 天台县| 石楼县| 永川市| 吴桥县| 莱阳市| 阿勒泰市| 始兴县| 昔阳县| 沙田区| 永州市| 关岭| 浏阳市| 呼图壁县| 浠水县| 保靖县| 承德市| 徐水县| 盘锦市| 永仁县| 东安县| 伊宁县| 资中县|