HouTu
HouTu,一款基於MySQL的簡單易用又功能強大的代碼生成工具。取名后土,后土又名後土,源於母系社會自然崇拜中的土地與女性崇拜。其掌陰陽,育萬物,因此被稱爲大地之母。本項目取名HouTu,取義“育萬物”之意,通過定製Freemarker模板,可以生成任意結構化的代碼,如 DO、Mapper、XML、Service、Controller、SQL、Html等等,只要你能寫出模板,HouTu就能交付給你成品代碼。
特點
- 原理簡單:
HouTu
以原生MySQL
語句爲基礎,獲取如數據庫列表、表詳情和列詳情等信息,結合Freemarker
模板生成Java
代碼。 - 可定製模板:
HouTu
集成Freemarker
模板,只要是遵循Freemarker
開發的模板都可以自動生成對應的Java
代碼。 - 功能強大:支持單表生成、多表生成,理論上支持生成任意結構化的代碼。
快速開始
聲明入口類
Generator g = new Generator(Config.getInstance()
.setDriver("com.mysql.cj.jdbc.Driver")
.setUrl("jdbc:mysql://127.0.0.1:3306/houtu?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true&useLegacyDatetimeCode=false")
.setUsername("root")
.setPassword("root")
.setPrimaryKeyType("Integer")
.setClassPrefix("HouTu")
.setClearClassPrefix("HouTu")
.setOutRootDir(System.getProperty("user.dir") + File.separator + "generator-output"));
Generator.java
只提供了一個構造函數,傳入系統配置類Config.java
使用API
Generator.java
對外提供了四個接口:
Generator#deleteOutRootDir()
: 刪除輸出目錄的文件,一般在generate
之前調用,清空舊的輸出文件Generator#printAllTableInfo()
: 打印所有表信息Generator#generateAll()
: 將所有表生成java文件Generator#generate(String[])
: 指定表名生成java文件,入參爲可變參數,如果爲空則調用Generator#generateAll()
方法
具體使用
//刪除生成器的輸出目錄
g.deleteOutRootDir();
// 打印所有表
g.printAllTableInfo();
// 生成單個表的Java文件
g.generate("sys_user");
輸出內容
00:53:57.945 [main] INFO me.zhyd.houtu.Generator - [delete dir] D:\project\java\HouTu\generator-output
00:53:57.955 [main] INFO me.zhyd.houtu.Generator - ----All Table Names Begin----
00:53:57.990 [main] INFO me.zhyd.houtu.Generator - InnoDB - "sys_resources" - utf8_general_ci
00:53:57.992 [main] INFO me.zhyd.houtu.Generator - InnoDB - "sys_role" - utf8_general_ci
00:53:57.992 [main] INFO me.zhyd.houtu.Generator - InnoDB - "sys_role_resources" - utf8_general_ci
00:53:57.992 [main] INFO me.zhyd.houtu.Generator - InnoDB - "sys_user" - utf8_general_ci
00:53:57.992 [main] INFO me.zhyd.houtu.Generator - InnoDB - "sys_user_role" - utf8_general_ci
00:53:57.992 [main] INFO me.zhyd.houtu.Generator - ----All Table Names END----
00:53:57.992 [main] INFO me.zhyd.houtu.Generator - ---------------------------------------------------------------
00:53:57.992 [main] INFO me.zhyd.houtu.Generator - - BEGIN generate by sys_user
00:53:57.992 [main] INFO me.zhyd.houtu.Generator - ---------------------------------------------------------------
00:53:58.077 [main] INFO me.zhyd.houtu.Generator - ---------------------------------------------------------------
00:53:58.078 [main] INFO me.zhyd.houtu.Generator - - BEGIN generate by sys_user
00:53:58.078 [main] INFO me.zhyd.houtu.Generator - ---------------------------------------------------------------
00:53:58.471 [main] INFO me.zhyd.houtu.Generator - D:\project\java\HouTu\generator-output\biz\dto\HouTuSysUserDto.java
00:53:58.476 [main] INFO me.zhyd.houtu.Generator - D:\project\java\HouTu\generator-output\biz\form\HouTuSysUserForm.java
00:53:58.478 [main] INFO me.zhyd.houtu.Generator - D:\project\java\HouTu\generator-output\biz\service\HouTuSysUserService.java
00:53:58.479 [main] INFO me.zhyd.houtu.Generator - D:\project\java\HouTu\generator-output\biz\service\impl\HouTuSysUserServiceImpl.java
00:53:58.481 [main] INFO me.zhyd.houtu.Generator - D:\project\java\HouTu\generator-output\biz\vo\HouTuSysUserVO.java
00:53:58.482 [main] INFO me.zhyd.houtu.Generator - D:\project\java\HouTu\generator-output\controller\render\RenderHouTuSysUserController.java
00:53:58.485 [main] INFO me.zhyd.houtu.Generator - D:\project\java\HouTu\generator-output\controller\RestHouTuSysUserController.java
00:53:58.487 [main] INFO me.zhyd.houtu.Generator - D:\project\java\HouTu\generator-output\persistence\beans\HouTuSysUser.java
00:53:58.490 [main] INFO me.zhyd.houtu.Generator - D:\project\java\HouTu\generator-output\persistence\mapper\HouTuSysUserMapper.java
00:53:58.491 [main] INFO me.zhyd.houtu.Generator - D:\project\java\HouTu\generator-output\persistence\xml\HouTuSysUserMapper.xml
00:53:58.493 [main] INFO me.zhyd.houtu.core.GeneratorHelper - 程序執行完畢,釋放資源...
內置模板
輕量級的代碼生成工具。根據模板進行生成,理論上支持任意模板代碼的生成。
|-- biz
| |-- dto
| | `-- ${table.className}Dto.java
| |-- service
| | |-- ${table.className}Service.java
| | `-- impl
| | `-- ${table.className}ServiceImpl.java
| `-- vo
| `-- ${table.className}ConditionVO.java
|-- controller
| |-- Rest${table.className}Controller.java
| `-- render
| `-- Render${table.className}Controller.java
|-- persistence
| |-- beans
| | `-- ${table.className}.java
| |-- mapper
| | `-- ${table.className}Mapper.java
| `-- xml
| `-- ${table.className}Mapper.xml
|-- sql
|-- view
| `-- ${table.className}
|-- annotation.include
|-- java_copyright.include
`-- macro.include
定製模板
模板配置項
| 配置項 | 類型 | 示例 | 解釋 | 備註 |
|:---------------------------|:---------|:---------|:---------||:---------|
| classPrefix
| String
| Light | 生成的類前綴,先去除 clearClassPrefix 再添加 classPrefix | |
| clearClassPrefix
| String
| Light | 需要去除的類前綴,先去除 clearClassPrefix 再添加 classPrefix | |
| driver
| String
| com.mysql.cj.jdbc.Driver | | |
| url
| String
| jdbc:mysql://127.0.0.1:3306/light | | |
| db
| String
| light | 選擇的數據庫,非必填,如果爲空會從url中解析 | |
| username
| String
| root | 數據庫用戶名 | |
| password
| String
| root | 數據庫密碼 | |
| basePackage
| String
| me.zhyd.xx.core | 根包名 | |
| beansPackage
| String
| me.zhyd.light.core.db.persistence.beans | beans包名 | |
| mapperPackage
| String
| me.zhyd.xx.core.db.persistence.mapper | mapper接口包名 | |
| outRootDir
| String
| D:\project\generator\generator-output | 文件輸出路徑 | |
| templatePath
| String
| template/ | 模板路徑,基於當前項目路徑 | |
| table
| JSONObject
| object | 表信息 | |
table
配置項
| 配置項 | 類型 | 示例 | 解釋 | 備註 |
|:---------------------------|:---------|:---------|:---------||:---------|
| type
| String
| BASE TABLE | 數據表類型 | |
| db
| String
| light | 數據庫名 | |
| tableName
| String
| links | 數據表名 | |
| coding
| String
| utf8mb4_general_ci | 數據表編碼 | |
| createTime
| String
| 2020-04-26 13:25:37 | 數據表創建時間 | |
| engine
| String
| InnoDB | 數據表引擎 | |
| remark
| String
| | 數據表註釋 | |
| className
| String
| LightLinks | 待生成的類名 | |
| classNameFirstLower
| String
| lightLinks | 首字母小寫的類名 | |
| classNameFirstUpper
| String
| LightLinks | 首字母大寫的類名 | |
| columns
| JSONArray
| array | 列信息 | |
table.columns
配置項
| 配置項 | 類型 | 示例 | 解釋 | 備註 |
|:---------------------------|:---------|:---------|:---------||:---------|
| tableName
| String
| links | 表名 | |
| keyType
| String
| PRI | 鍵類型(PRI 主鍵) | |
| columnName
| String
| id | 列名 | |
| columnNameFirstLower
| String
| id | 列名首字母小寫 | |
| columnNameFirstUpper
| String
| Id | 列名首字母大寫 | |
| notNull
| Boolean
| true | 是否允許爲空 | |
| length
| Integer
| 0 | 長度 | |
| scale
| Integer
| 0 | 精度,當爲浮點數字類型時可用 | |
| remark
| String
| | 列註釋 | |
| columnType
| String
| bigint | 列對應的數據庫數據類型 | |
| jdbcType
| String
| BIGINT | 列對應的JDBC數據類型 | |
| javaType
| String
| java.lang.String | 列對應的Java數據類型 | |
| possibleShortJavaType
| String
| String | | |
| extra
| String
| auto_increment | 額外參數,auto_increment表自增 | |
待完成的功能
- 支持引用環境變量: ${env.JAVA_HOME} or System.properties: ${user.home}
- 自定義模板配置路徑(當前是基於項目根目錄的)
- 支持其他數據庫
開源推薦
JustAuth
史上最全的第三方登錄的開源工具庫,已集成國內外數十家平臺: https://gitee.com/yadong.zhang/JustAuthspring-boot-demo
深度學習並實戰 spring boot 的項目: https://github.com/xkcoding/spring-boot-demomica
SpringBoot 微服務高效開發工具集: https://github.com/lets-mica/mica
參與貢獻
- fork本項目到自己的repo
- 把fork過去的項目也就是你倉庫中的項目clone到你的本地
- 修改代碼
- commit後push到自己的庫
- 發起PR(pull request) 請求,提交到
dev
分支 - 等待作者合併
開源地址
- https://gitee.com/yadong.zhang/HouTu
- https://github.com/zhangyd-c/HouTu