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()) |
手動配置代碼生成器
-
建表,插入資料
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]'); -
匯入依賴
<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> -
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) -
在測驗類里寫入主方法并修改引數,運行即可【配置已經封裝好了】
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(); } -
運行結果:

生成的包:

注意:代碼生成器生成的物體類是用@Setter和@Getter ,沒有toString方法和有參、無參構造,所以代碼生成后需要手動在物體類上洗掉@Setter和@Getter ,添加@Data @NoArgsConstructor @AllArgsConstructor
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502309.html
標籤:其他
上一篇:計算機基礎之編程語言
下一篇:django中的中間件
