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

Mybatis Flex代碼生成器詳解

 更新時間:2025年11月04日 09:30:33   作者:小林學(xué)習(xí)編程  
MybatisFlex是一個輕量級、高性能的MyBatis增強框架,支持多種數(shù)據(jù)庫操作和靈活的SQL生成,文章還介紹了MybatisFlex代碼生成器,可以通過數(shù)據(jù)庫表快速生成Entity、Mapper、Service和Controller等代碼

1、什么是Mybatis Flex

MyBatis-Flex是一個優(yōu)雅的 MyBatis增強框架

MyBatis-Flex 是一個優(yōu)雅的 MyBatis 增強框架,它非常輕量、同時擁有極高的性能與靈活性。

我們可以輕松的使用 Mybaits-Flex 鏈接任何數(shù)據(jù)庫,其內(nèi)置的 QueryWrapper^亮點 幫助我們極大的減少了 SQL 編寫的工作的同時,減少出錯的可能性。

總而言之,MyBatis-Flex 能夠極大地提高我們的開發(fā)效率和開發(fā)體驗,讓我們有更多的時間專注于自己的事情。

MyBatis-Flex特征

他的作用和Mybatis Flex一樣,都是對傳統(tǒng)操作數(shù)據(jù)庫的Mybatis框架進行增加。

他的三大優(yōu)勢:

1、輕量

除了 MyBatis,沒有任何第三方依賴輕依賴、沒有任何攔截器,其原理是通過 SqlProvider 的方式實現(xiàn)的輕實現(xiàn)。同時,在執(zhí)行的過程中,沒有任何的 Sql 解析(Parse)輕運行。

這帶來了幾個好處:

  • 1、極高的性能;
  • 2、極易對代碼進行跟蹤和調(diào)試;
  • 3、更高的把控性。

2、靈活

支持 Entity 的增刪改查、以及分頁查詢的同時,MyBatis-Flex 提供了 Db + Row^靈活 工具,可以無需實體類對數(shù)據(jù)庫進行增刪改查以及分頁查詢。 與此同時,MyBatis-Flex 內(nèi)置的 QueryWrapper^靈活 可以輕易的幫助我們實現(xiàn) 多表查詢、鏈接查詢、子查詢 等等常見的 SQL 場景。

3、強大

支持任意關(guān)系型數(shù)據(jù)庫,還可以通過方言持續(xù)擴展,同時支持 多(復(fù)合)主鍵、邏輯刪除樂觀鎖配置、數(shù)據(jù)脫敏數(shù)據(jù)審計、 數(shù)據(jù)填充 等等功能。

2、 mybatis-flex代碼生成器

在 mybatis-flex 中,有了一個名稱為 mybatis-flex-codegen 的模塊,提供了可以通過數(shù)據(jù)庫表,生成代碼的功能。

當(dāng)我們把數(shù)據(jù)庫表設(shè)計完成后, 就可以使用其快速生成 Entity、 Mapper、 Service、 Controller 等產(chǎn)物。

除此之外,我們還可以通過擴展生成更多的產(chǎn)物,文檔參考 #添加其他產(chǎn)物的生成。

2.1、引入依賴

注意使用的是Springboot3的

<dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-spring-boot3-starter</artifactId>
    <version>1.11.0</version>
</dependency>

還需要引入相關(guān)依賴

<!-- 代碼生成模塊 -->
<dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-codegen</artifactId>
    <version>1.11.0</version>
</dependency>
<!-- 數(shù)據(jù)庫連接池 -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>

2.2、開發(fā)生成器

在根包下新建 generator 包,新建 MyBatisCodeGenerator 類,編寫代碼生成器。先從官方復(fù)制示例代碼,然后按需修改即可。

public class MyBatisCodeGenerator {

    // 需要生成的表名
    private static final String[] TABLE_NAMES = {"user"};

    public static void main(String[] args) {
        // 獲取數(shù)據(jù)源信息
        Dict dict = YamlUtil.loadByPath("application.yml");
        Map<String, Object> dataSourceConfig = dict.getByPath("spring.datasource");
        String url = String.valueOf(dataSourceConfig.get("url"));
        String username = String.valueOf(dataSourceConfig.get("username"));
        String password = String.valueOf(dataSourceConfig.get("password"));
        // 配置數(shù)據(jù)源
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);

        // 創(chuàng)建配置內(nèi)容
        GlobalConfig globalConfig = createGlobalConfig();

        // 通過 datasource 和 globalConfig 創(chuàng)建代碼生成器
        Generator generator = new Generator(dataSource, globalConfig);

        // 生成代碼
        generator.generate();
    }

    // 詳細配置見:https://mybatis-flex.com/zh/others/codegen.html
    public static GlobalConfig createGlobalConfig() {
        // 創(chuàng)建配置內(nèi)容
        GlobalConfig globalConfig = new GlobalConfig();

        // 設(shè)置根包,建議先生成到一個臨時目錄下,生成代碼后,再移動到項目目錄下
        globalConfig.getPackageConfig()
                .setBasePackage("com.yupi.yuaicodemother.genresult");

        // 設(shè)置表前綴和只生成哪些表,setGenerateTable 未配置時,生成所有表
        globalConfig.getStrategyConfig()
                .setGenerateTable(TABLE_NAMES)
                // 設(shè)置邏輯刪除的默認字段名稱
                .setLogicDeleteColumn("isDelete");

        // 設(shè)置生成 entity 并啟用 Lombok
        globalConfig.enableEntity()
                .setWithLombok(true)
                .setJdkVersion(21);

        // 設(shè)置生成 mapper
        globalConfig.enableMapper();
        globalConfig.enableMapperXml();

        // 設(shè)置生成 service
        globalConfig.enableService();
        globalConfig.enableServiceImpl();

        // 設(shè)置生成 controller
        globalConfig.enableController();

        // 設(shè)置生成時間和字符串為空,避免多余的代碼改動
        globalConfig.getJavadocConfig()
                .setAuthor("<a href=\"https://github.com/liyupi\">程序員魚皮</a>")
                .setSince("");
        return globalConfig;
    }
}

上述代碼中,我們從配置文件中獲取數(shù)據(jù)庫連接信息,用來初始化數(shù)據(jù)源。然后自定義了一些生成配置,包括:

  • 指定邏輯刪除字段中
  • 使用的 JDK 版本
  • 生成的代碼放到哪個包(建議選擇一個獨立的包,不要跟老代碼混一起)
  • 要生成哪些文件
  • 生成什么代碼注釋

2.3、執(zhí)行代碼生成器

查看結(jié)果

擴展思路-自定義代碼生成:

可以參考 官方文檔,通過自定義模板的方式更靈活地控制代碼生成的內(nèi)容,比如設(shè)置主鍵自增策略、增加 Controller 層生成的接口等等。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Security OAuth2認證授權(quán)示例詳解

    Spring Security OAuth2認證授權(quán)示例詳解

    這篇文章主要介紹了Spring Security OAuth2認證授權(quán)示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 淺談javap命令拆解字節(jié)碼文件

    淺談javap命令拆解字節(jié)碼文件

    這篇文章主要介紹了拆解字節(jié)碼文件javap命令,對反編譯感興趣的同學(xué)可以參考下
    2021-04-04
  • Java8函數(shù)式接口Predicate用法示例詳解

    Java8函數(shù)式接口Predicate用法示例詳解

    這篇文章主要為大家介紹了Java8函數(shù)式接口Predicate用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • SpringCloud Eureka服務(wù)的基本配置和操作方法

    SpringCloud Eureka服務(wù)的基本配置和操作方法

    Eureka是Netflix開源的一個基于REST的服務(wù)治理框架,主要用于實現(xiàn)微服務(wù)架構(gòu)中的服務(wù)注冊與發(fā)現(xiàn),Eureka是Netflix開源的服務(wù)發(fā)現(xiàn)框架,用于在分布式系統(tǒng)中實現(xiàn)服務(wù)的自動注冊與發(fā)現(xiàn),本文介紹SpringCloud Eureka服務(wù)的基本配置和操作方法,感興趣的朋友一起看看吧
    2023-12-12
  • SpringMVC的處理器攔截器HandlerInterceptor詳解

    SpringMVC的處理器攔截器HandlerInterceptor詳解

    這篇文章主要介紹了SpringMVC的處理器攔截器HandlerInterceptor詳解,SpringWebMVC的處理器攔截器,類似于Servlet開發(fā)中的過濾器Filter,用于處理器進行預(yù)處理和后處理,需要的朋友可以參考下
    2024-01-01
  • Spring Cloud Gateway內(nèi)置的斷言和過濾器作用說明

    Spring Cloud Gateway內(nèi)置的斷言和過濾器作用說明

    這篇文章主要介紹了Spring Cloud Gateway內(nèi)置的斷言和過濾器作用說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • java中List集合去重常見的幾種方法總結(jié)

    java中List集合去重常見的幾種方法總結(jié)

    在Java編程中List集合是一種常用的數(shù)據(jù)結(jié)構(gòu),它允許我們存儲和操作一組有序的對象,這篇文章主要給大家介紹了關(guān)于java中List集合去重常見的幾種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-07-07
  • Spring工程中集成多個redis數(shù)據(jù)源的思路詳解

    Spring工程中集成多個redis數(shù)據(jù)源的思路詳解

    Spring項目集成雙Redis數(shù)據(jù)源需配置兩個連接工廠與RedisTemplate,通過@Primary指定默認Bean,@Qualifier注入特定Bean,支持集群環(huán)境,本文給大家介紹Spring工程中集成多個redis數(shù)據(jù)源的相關(guān)知識,感興趣的朋友一起看看吧
    2025-07-07
  • 深入理解LinkedHashSet集合的底層機制

    深入理解LinkedHashSet集合的底層機制

    這篇文章主要介紹了LinkedHashSet的底層機制詳解,LinkedHashSet根據(jù)元素的hashCode值來決定元素的存儲位置,同時使用鏈表維護元素的次序,?這使得元素看起來是以插入順序保存的,需要的朋友可以參考下
    2023-10-10
  • 關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄

    關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄

    這篇文章主要介紹了關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論

南岸区| 图片| 蓬莱市| 黑水县| 广汉市| 萍乡市| 和林格尔县| 平远县| 正阳县| 明星| 万年县| 萍乡市| 永德县| 四平市| 玛沁县| 象山县| 昌平区| 昌平区| 尚志市| 临泽县| 陈巴尔虎旗| 金山区| 凌源市| 宣威市| 青川县| 青神县| 蒲江县| 新密市| 进贤县| 民乐县| 黔南| 韶关市| 余江县| 西城区| 南木林县| 天长市| 内丘县| 错那县| 沭阳县| 个旧市| 高邮市|