MybatisPlus——全網配置最全的代碼生成器

来源:https://www.cnblogs.com/buchizicai/archive/2022/08/19/16606917.html
-Advertisement-
Play Games

MybatisPlus代碼生成器 這裡講解的是新版 (mybatis-plus 3.5.1+版本),舊版不相容 官方文檔:https://baomidou.com/(建議多看看官方文檔,每種功能裡面都有講解) 配置 這裡的配置表格和官方文檔一致 數據源配置(DataSource) | 屬性 | 說明 ...


MybatisPlus代碼生成器

這裡講解的是新版 (mybatis-plus 3.5.1+版本),舊版不相容

官方文檔:https://baomidou.com/(建議多看看官方文檔,每種功能裡面都有講解)

配置

這裡的配置表格和官方文檔一致

數據源配置(DataSource)

屬性 說明 示例
url jdbc路徑 jdbc:mysql://127.0.0.1:3306/mybatis-plus
username 資料庫賬號 root
password 資料庫密碼 123456
dbQuery(IDbQuery) 資料庫查詢 new MySqlQuery()
schema(String) 資料庫schema(部分資料庫適用) mybatis-plus
typeConvert(ITypeConvert) 資料庫類型轉換器 new MySqlTypeConvert()
keyWordsHandler(IKeyWordsHandler) 資料庫關鍵字處理器 new MySqlKeyWordsHandler()

全局配置(GlobalConfig)

方法 說明 示例
fileOverride 覆蓋已生成文件 預設值:false
disableOpenDir 禁止打開輸出目錄 預設值:true
outputDir(String) 指定輸出目錄 /opt/baomidou/ 預設值: windows:D:// linux or mac : /tmp
author(String) 作者名 baomidou 預設值:作者
enableKotlin 開啟 kotlin 模式 預設值:false
enableSwagger 開啟 swagger 模式 預設值:false
dateType(DateType) 時間策略 DateType.ONLY_DATE=Date 預設值: DateType.TIME_PACK=LocalDateTime
commentDate(String) 註釋日期 預設值: yyyy-MM-dd

包配置(PackageConfig)

方法 說明 示例
parent(String) 父包名 預設值:com.baomidou
moduleName(String) 父包模塊名 預設值:無
entity(String) Entity 包名 預設值:entity
service(String) Service 包名 預設值:service
serviceImpl(String) Service Impl 包名 預設值:service.impl
mapper(String) Mapper 包名 預設值:mapper
mapperXml(String) Mapper XML 包名 預設值:mapper.xml
controller(String) Controller 包名 預設值:controller
other(String) 自定義文件包名 輸出自定義文件時所用到的包名
pathInfo(Map<OutputFile, String>) 路徑配置信息 Collections.singletonMap(OutputFile.mapperXml, "D://")

策略配置(StrategyConfig)

方法 說明 示例
enableCapitalMode 開啟大寫命名 預設值:false
enableSkipView 開啟跳過視圖 預設值:false
disableSqlFilter 禁用 sql 過濾 預設值:true,語法不能支持使用 sql 過濾表的話,可以考慮關閉此開關
enableSchema 啟用 schema 預設值:false,多 schema 場景的時候打開
likeTable(LikeTable) 模糊表匹配(sql 過濾) likeTable 與 notLikeTable 只能配置一項
notLikeTable(LikeTable) 模糊表排除(sql 過濾) likeTable 與 notLikeTable 只能配置一項
addInclude(String...) 增加表匹配(記憶體過濾) include 與 exclude 只能配置一項
addExclude(String...) 增加表排除匹配(記憶體過濾) include 與 exclude 只能配置一項
addTablePrefix(String...) 增加過濾表首碼
addTableSuffix(String...) 增加過濾表尾碼
addFieldPrefix(String...) 增加過濾欄位首碼
addFieldSuffix(String...) 增加過濾欄位尾碼
entityBuilder 實體策略配置
controllerBuilder controller 策略配置
mapperBuilder mapper 策略配置
serviceBuilder service 策略配置

模板引擎配置(TemplateEngine)

預設 Velocity ;可選模板引擎 Beetl 或 Freemarker。(二選一即可)

模板引擎 代碼
Velocity 預設 .templateEngine(new VelocityTemplateEngine())
Freemarker 可選 .templateEngine(new FreemarkerTemplateEngine())
Beetl 可選 .templateEngine(new BeetlTemplateEngine())

手動配置代碼生成器

  1. 建表,插入數據

    DROP TABLE IF EXISTS user;
    
    CREATE TABLE user
    (
        id BIGINT(20) NOT NULL COMMENT '主鍵ID',
        name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
        age INT(11) NULL DEFAULT NULL COMMENT '年齡',
        email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱',
        version INT(10) NOT NULL DEFAULT 1 COMMIT '樂觀鎖版本號',
        DELETED INT(10) NOT NULL DEFAULT 0 COMMIT '邏輯刪除',
        CREATE_TIME DATE COMMIT '創建時間',
        modify_time DATE COMMIT '更新時間',
        PRIMARY KEY (id)
    );
    
    DELETE FROM user;
    
    INSERT INTO user (id, name, age, email) VALUES
    (1, '工藤新一','[email protected]'),
    (2, '毛利蘭','[email protected]'),
    (3, '柯南', 28, '[email protected]'),
    (4, '灰原哀', 21, '[email protected]'),
    (5, '工藤有希子', 24, '[email protected]');
    
    
  2. 導入依賴

    <dependencies>
        <!--spring-boot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--SpringBootTest-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--swagger-->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.6.3</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--mysql 驅動-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--mybatis-plus-generator 生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--velocity-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        <!--以下兩個引擎模板保留一個即可,看個人愛好選擇-->
        <!--freemarker引擎模板-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
        <!--beetl引擎模板-->
        <dependency>
            <groupId>com.ibeetl</groupId>
            <artifactId>beetl</artifactId>
            <version>3.8.1.RELEASE</version>
        </dependency>
    </dependencies>
    
  3. yaml

    #設置開發環境
    spring:
      datasource:
        username: root
        password: 123456
        driver-class-name: com.p6spy.engine.spy.P6SpyDriver
        url: jdbc:p6spy:mysql://localhost:3306/mybatis_plus?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    
    
    
    
    mybatis-plus:
    	#配置日誌  log-impl:日誌實現
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      global-config:
        db-config:
          logic-delete-field: isDelete # 全局邏輯刪除的實體欄位名(since 3.3.0,配置後可以忽略不配置步驟2)
          logic-delete-value: 1 # 邏輯已刪除值(預設為 1)
          logic-not-delete-value: 0 # 邏輯未刪除值(預設為 0)
    
    
    
    
    
  4. 在測試類里寫入主方法並修改參數,運行即可【配置已經封裝好了】

    public static void main(String[] args) {
        
        //這裡按著給的註解修改參數即可
        
            //手動配置數據源
            String url="jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8";   //註意修改資料庫名
            String name="root";
            String password="123456";
    
            //資料庫表的設置
            List<String> listTable = Arrays.asList("user");  //設置需要自動代碼生成的表名
            List<String> listTableSuffix = Arrays.asList("_b");    //設置 過濾 表的尾碼
            List<String> listTablePrefix = Arrays.asList("t_","c_"); //設置 過
    
            //基本信息
            String author = "柯南";    //作者
            String parent = "com";   //父包名
            String module = "example";   //模塊包名
        
        	
        	
        //已封裝好,無需更改。可按照需求進行註釋
        
            //1、配置數據源
            FastAutoGenerator.create(url, name, password)
                    //2、全局配置
                    .globalConfig(builder -> {
                        builder.author(author) // 設置作者名
                                .outputDir(System.getProperty("user.dir") + "/src/main/java")   //設置輸出路徑:項目的 java 目錄下【System.getProperty("user.dir")意思是獲取到項目所在的絕對路徑】
                                .commentDate("yyyy-MM-dd hh:mm:ss")   //註釋日期
                                .dateType(DateType.ONLY_DATE)   //定義生成的實體類中日期的類型 TIME_PACK=LocalDateTime;ONLY_DATE=Date;
                                .fileOverride()   //覆蓋之前的文件
                                .enableSwagger()   //開啟 swagger 模式
                                .disableOpenDir();   //禁止打開輸出目錄,預設打開
                    })
                    //3、包配置
                    .packageConfig(builder -> {
                        builder.parent(parent) // 設置父包名
                                .moduleName(module)   //設置模塊包名
                                .entity("entity")   //pojo 實體類包名
                                .service("service") //Service 包名
                                .serviceImpl("service.impl") // ***ServiceImpl 包名
                                .mapper("mapper")   //Mapper 包名
                                .xml("mapper.xml")  //Mapper XML 包名
                                .controller("controller") //Controller 包名
                                .other("config")    //自定義包名(一般不在這裡生成,而是後面編寫的時候自己建包)
                                .pathInfo(Collections.singletonMap(OutputFile.mapper.xml, System.getProperty("user.dir")+"/src/main/resources/mapper"));    //配置 mapper.xml 路徑信息:項目的 resources 目錄下
                    })
                    //4、策略配置
                    .strategyConfig(builder -> {
                        builder
                                .enableCapitalMode()    //開啟大寫命名
                                .enableSkipView()   //創建實體類的時候跳過視圖
                                .addInclude(listTable) // 設置需要生成的數據表名
                                .addTableSuffix(listTableSuffix) //設置 過濾 表的尾碼
                                .addTablePrefix(listTablePrefix) // 設置 過濾 表的首碼
    
                                //4.1、實體類策略配置
                                .entityBuilder()
                                .enableChainModel() //開啟鏈式模型
                                //.disableSerialVersionUID()  //預設是開啟實體類序列化,可以手動disable使它不序列化。由於項目中需要使用序列化就按照預設開啟了
                                .enableTableFieldAnnotation()       // 開啟生成實體時生成欄位註解
                                .enableLombok() //開啟 Lombok
                                .versionColumnName("version")   //樂觀鎖欄位名(資料庫)
                                .versionPropertyName("version") //樂觀鎖屬性名(實體)
                                .logicDeleteColumnName("deleted")   //邏輯刪除欄位名(資料庫)
                                .logicDeletePropertyName("deleteFlag")  //邏輯刪除屬性名(實體)
                                .naming(NamingStrategy.underline_to_camel)  //資料庫表映射到實體的命名策略:預設是下劃線轉駝峰命。這裡可以不設置
                                .columnNaming(NamingStrategy.underline_to_camel)    //資料庫表欄位映射到實體的命名策略:下劃線轉駝峰命。(預設是和naming一致,所以也可以不設置)
                                .addTableFills(
                                        new Column("create_time", FieldFill.INSERT),
                                        new Column("modify_time", FieldFill.INSERT_UPDATE)
                                )   //添加表欄位填充,"create_time"欄位自動填充為插入時間,"modify_time"欄位自動填充為插入修改時間
                                .idType(IdType.AUTO)    //設置主鍵自增
    
                                //4.2、Controller策略配置
                                .controllerBuilder()
                                .enableHyphenStyle()    //開啟駝峰連轉字元
                                .formatFileName("%sController") //格式化 Controller 類文件名稱,%s進行匹配表名,如 UserController
                                .enableRestStyle()  //開啟生成 @RestController 控制器
    
                                //4.3、service 策略配置
                	            .serviceBuilder()
                                .formatServiceFileName("%sService") //格式化 service 介面文件名稱,%s進行匹配表名,如 UserService
                                .formatServiceImplFileName("%sServiceImpl") //格式化 service 實現類文件名稱,%s進行匹配表名,如 UserServiceImpl
    
                                //4.4、Mapper策略配置
                                .mapperBuilder()
                                .superClass(BaseMapper.class)   //設置父類
                                .enableBaseResultMap()  //啟用 BaseResultMap 生成
                                .enableBaseColumnList() //啟用 BaseColumnList
                                .formatMapperFileName("%sMapper")   //格式化 mapper 文件名稱
                                .enableMapperAnnotation()       //開啟 @Mapper 註解
                                .formatXmlFileName("%sXml") //格式化Xml文件名稱
                                .formatMapperFileName("%sMapper");   //格式化Mapper文件名稱
    
                    })
                    //5、模板
                    .templateEngine(new VelocityTemplateEngine())
                    /*
                        模板引擎配置,預設 Velocity 可選模板引擎 Beetl 或 Freemarker(以下兩個引擎用哪個就保留哪個)
                       .templateEngine(new BeetlTemplateEngine())
                       .templateEngine(new FreemarkerTemplateEngine())
                     */
                	.templateEngine(new FreemarkerTemplateEngine())	//本人選擇了Freemarker
                    //6、執行
                    .execute();
        }
    
  5. 運行結果:

    image

    生成的包:

    image

註意:代碼生成器生成的實體類是用@Setter和@Getter ,沒有toString方法和有參、無參構造,所以代碼生成後需要手動在實體類上刪除@Setter和@Getter ,添加@Data @NoArgsConstructor @AllArgsConstructor



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

-Advertisement-
Play Games
更多相關文章
  • 想要項目快速迭代,輪子必不可少。normalize.css,element-plus,axios,moment,vue-router,less,前端必知必會的輪子你都知道嗎? ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 uni.login(OBJECT)登錄 H5平臺登陸註意事項: 微信內嵌瀏覽器運行H5版時,可通過js sdk實現微信登陸,需要引入一個單獨的js,詳見普通瀏覽器上實現微信登陸,並非開放API,需要向微信申請,僅個別開發者有此許可權H5平臺 ...
  • 本文是深入淺出 ahooks 源碼系列文章的第九篇,該系列已整理成文檔-地址。覺得還不錯,給個 star 支持一下哈,Thanks。 今天來看看 ahooks 是怎麼封裝 cookie/localStorage/sessionStorage 的。 cookie ahooks 封裝了 useCooki ...
  • 遞歸組件 點擊打開視頻講解更加詳細 組件是可以在它們自己的模板中調用自身的。不過它們只能通過 name 選項來做這件事: name: 'unique-name-of-my-component' 當你使用 Vue.component 全局註冊一個組件時,這個全局的 ID 會自動設置為該組件的 name ...
  • Iterator Iterator 概念 Iterator 提供了一種統一的介面機制,為各種不同數據結構提供統一的訪問機制。定義 Iterator 就是提供一個具有 next() 方法的對象,每次調用 next() 都會返回一個結果對象,該結果對象有兩個屬性,value 表示當前的值,done 表示 ...
  • 強制更新($forceUpdate) 點擊打開視頻講解更加詳細 在vue中,如果data中有基本數據類型變數:age,修改他,頁面會自動更新。 但如果data中的變數為數組或對象(引用數據類型),我們直接去給某個對象或數組添加屬性,頁面是識別不到的,不會同步更新; <template> <div i ...
  • Vue中組件通信方式有很多,其中Vue2和Vue3實現起來也會有很多差異;本文將通過選項式API 組合式API以及setup三種不同實現方式全面介紹Vue2和Vue3的組件通信方式。其中將要實現的通信方式如下表所示 | 方式 | Vue2 | Vue3 | | | | | | 父傳子 | props ...
  • 在『伺服器部署 Vue 和 Django 項目的全記錄』一文中,介紹了在伺服器中使用 Nginx 部署前後端項目的過程。然而,當 Web 應用流量增多時,需要考慮負載均衡、流量分發、容災等情況,原生的部署方式通常難以滿足需求。此時,引入 Docker 部署多節點,能夠在單台高性能伺服器或伺服器集群中... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...