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

MybatisPlus程式碼生成器

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

官方文檔://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