MP 代碼生成器工具類

来源:https://www.cnblogs.com/cndada/archive/2023/03/07/17188935.html
-Advertisement-
Play Games

Mybatis-Plus 代碼生成器工具類 對 MP 的代碼生成器寫一個簡單的工具類: public class Main { public static String scanner(String tip) { Scanner scanner = new Scanner(System.in); S ...


Mybatis-Plus 代碼生成器工具類

對 MP 的代碼生成器寫一個簡單的工具類:

public class Main {
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入" + tip + ":");
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (!StringUtils.isEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("請輸入正確的" + tip + "!");
    }

    public static void main(String[] args) {
//        String parentPath = System.getProperty("user.dir"); // 如果工程就一個模塊只設置 parentName
        String parentPath = "E:\\xxx\\xxx\\"; // 如果工程就一個模塊只設置 parentName
        String submoduleName = "test"; // 如果有子模塊還需設置 submoduleName 一般針對一個模塊的表
        String generatingPath = "com.cnda.server"; // 逆向生成的代碼的根路徑


        /*
         *  AutoGenerator 代碼生成器
         */
        AutoGenerator ag = new AutoGenerator();

        System.out.println(parentPath);

        //1. 全局配置
        GlobalConfig config = new GlobalConfig();

        /*
         * GlobalConfig主要配置的屬性有:
         * -- 是否支持AR模式
         * -- 生成代碼結構的根路徑
         * -- 文件是否覆蓋
         * -- 主鍵策略
         * -- 生成基本的resultMap
         * -- 生成基本的SQL片段,也就是xml文件中的sql標簽,包含了表中的欄位名
         */


        config  // 設置作者名
                .setAuthor("cnda")
                // 是否支持AR模式:AR 模式相對於原始的 MP 模式來說,可以通過 pojo 實體類(繼承了 Model 類)
                // 直接操作資料庫。但是底層任然是使用 mapper 進行操作。
                // .setActiveRecord(true)

                // 生成路徑:項目地址 + 模塊地址,一般情況下
                .setOutputDir(parentPath + "/"+ submoduleName+"/src/main/java")
                // 文件覆蓋
                //.setFileOverride(false)
                // 打開輸出目錄
                .setOpen(false)
                // 主鍵策略
                .setIdType(IdType.AUTO)
                // 設置日期格式          
                //.setDateType(DateType.ONLY_DATE)
                // 設置生成的service介面的名字的首字母是否為I,預設Service是以I開頭的
                .setServiceName("%sService")
                //生成基本的resultMap
                .setBaseResultMap(true)
                // 實體屬性 swagger2 註解
                //.setSwagger2(true)
                //生成基本的SQL片段
                .setBaseColumnList(true);

        //2. 數據源配置
        /**
         * DataSourceConfig的主要屬性配置
         * 此處為MP連接資料庫讀取資料庫中表的屬性和欄位名,幫我們自動生成項目結構和資料庫中表對應的實體類
         * -- 資料庫類型
         */
        DataSourceConfig dsConfig = new DataSourceConfig();
        // 設置資料庫類型
        dsConfig//.setDbType(DbType.MYSQL)
                .setDriverName("com.mysql.cj.jdbc.Driver")
                .setUrl("jdbc:mysql://localhost:3306/yeb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai")
                .setUsername("root")
                .setPassword("root");

        // 自定義配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {

            }
        };

        // 如果模板引擎是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";
        // 通過模板引擎是 velocity
        // String templatePath = "/templates/mapper.xml.vm";

        // 自定義輸出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定義配置會被優先輸出
        // 定義了 mapper.xml 文件輸出的位置!指向的是 resources/mapper/*
        focList.add(new FileOutConfig(templatePath) {

            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定義輸出文件名 , 如果你 Entity 設置了前尾碼、此處註意 xml 的名稱會跟著發生變化!!
                return parentPath + "/"+submoduleName+"/src/main/resources/mapper/"+tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);

        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setXml(null);


        //3. 策略配置globalConfiguration中
        /**
         * StrategyConfig的主要屬性配置
         * -- 全局大寫命名
         * -- 資料庫表映射到實體類的命名策略
         * -- 生成表(要生成實體類的表名,支持多表·11一起生成,以數組的形式填寫)
         * -- 設置表的首碼(TablePrefix)
         */
        StrategyConfig stConfig = new StrategyConfig();
        //全局大寫命名
        stConfig.setCapitalMode(true)
                // 資料庫表映射到實體的命名策略
                .setNaming(NamingStrategy.underline_to_camel) // 駝峰命名
                // 資料庫表欄位映射實體類的命名策略
                .setColumnNaming(NamingStrategy.no_change) // 不做任何改變
                // lombok 模型
                .setEntityLombokModel(true)
                // 生成 @RestController 控制器
                .setRestControllerStyle(true)
                // 生成的表,多個表以英文逗號區分
                .setInclude(scanner("表名,多個英文逗號分割").split(",")) // 由 scanner 控制台輸入多個表名進行逆向工程生成代碼
                //url中駝峰轉連字元
                .setControllerMappingHyphenStyle(true)
                // 設置表的首碼,防止生成實體類時出現表的首碼
                .setTablePrefix("t_");

        //4. 包名策略配置
        /**
         * PackageConfig的主要屬性配置
         * 公共包--Parent
         */
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setParent(generatingPath)
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setServiceImpl("service.impl")
                .setEntity("pojo");
        // mapper.xml 之前在 InjectionConfig 那裡配置過了
        //.setXml("mapper");

        //5. 整合配置
        /**
         * 整合需要的對象有:
         * --> GlobalConfig
         * --> DataSourceConfig
         * --> StrategyConfig
         * --> PackageConfig
         */
        ag.setGlobalConfig(config)
                .setDataSource(dsConfig)
                .setStrategy(stConfig)
                .setCfg(cfg)
                .setTemplate(templateConfig)
                .setTemplateEngine(new FreemarkerTemplateEngine())
                .setPackageInfo(pkConfig);
        //6. 執行
        ag.execute();
        System.out.println("======= 代碼生成完畢 ========");
    }
}

上面應該能滿足大部分基礎的項目結構。需要註意的是前面幾個路徑的變數設置。

還有一個就是 mapper.xml 一般是在項目的 resource 目錄下,如果需要設置到與 mapper 介面一個包下,就需要將 ag.setCfg(cfg) 刪除,然後再 pkConfig.setXml("path") 保證與 setMapper("path") 保持一致即可。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這篇文章主要描述消息隊列中的一些基本概念,我們在使用不同的消息隊列產品時,會遇到不同的“名詞”,今天我們今天來聊聊消息隊列發展歷史,以及一些相關基本概念。 ...
  • 1. 術語 1.1. 堆指代Java堆 1.2. 原生記憶體指代JVM的非堆記憶體 1.2.1. 包括C堆 1.2.2. 非堆記憶體就是原生記憶體 1.2.3. 一些常見的JDK類常常會使用原生記憶體,請確保正確使用這些類 1.3. 一個應用程式總的記憶體占用 1.3.1. JVM使用的原生記憶體和堆記憶體的總和 ...
  • VL50 簡易秒錶 `timescale 1ns/1ns module count_module( input clk, input rst_n, output reg [5:0]second, output reg [5:0]minute ); always@(posedge clk or neg ...
  • 今天我們分享一個用Python寫下載視頻+彈幕+評論的代碼。 之前自游寫了採集小破站視頻、彈幕、評論的代碼,還錄了視頻。 我當時就問他,你就不能把這些寫成GUI,把這些功能放到一起不是別人用起來更方便麽? 本來他還想反抗,當時我就直接叫他看著辦! 他哪受得了這種委屈,當時就乖乖寫代碼去了,現在我把代 ...
  • 在這裡簡述一下什麼是邏輯刪除,對於我們資料庫表的設計,其中許多表會有一個status欄位(就是標記當條數據是否顯示在前端,也有叫做deleteflag),當他標記為0或者1即為刪除,此僅僅表示不顯示該數據,當時資料庫中還是需要此數據。 好了,接下來上乾貨 首先在我們的config目錄(沒有就新建一個 ...
  • 一、引入 class OldboyStudent: school = 'oldboy' def choose_course(self): print('is choosing course') stu1 = OldboyStudent() stu2 = OldboyStudent() stu3 = ...
  • 一篇搞懂cookie和session cookie、session和token存在的意義是什麼? http是無狀態的,每次請求是獨立的,服務端不保存會話信息,所以他的好處也就是快,但缺點也顯而易見,就是無法對不同用戶進行區分。 什麼是cookie? cookie存儲於客戶端,請求後由伺服器發送回瀏覽 ...
  • 1. 問題 golang構建程式很簡單,當遇到需要調用c庫時,如通常使用 net,kafka, sqlite3 程式運行時就會調用當前伺服器的 動態庫,如果遇到沒有庫時,通常還需要 下載比如 alpine需要安裝sqlite apk add --no-cache sqlite-libs sqlite ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...