Java轉過來的同學對Mybatis的使用肯定不陌生,特別是對一堆表去生成相應的dao和entity的時候使用Mybatis generator所帶來的感觸,無比深刻。前面我們也講過原生的數據庫使用,講過gorm的使用,無論是原生的還是第三方的數據庫工具,都是需要我們手動的寫struct和相應的CRUD的。今天說的這一款插件跟Java中的Mybatis generator一樣,都是能幫我們簡化表與實體對應關系。
安裝
go get github.com/dejavuzhou/ginbro
默認安裝到了$GOPATH/bin中。
使用
接下來使用如下方式去連接你的數據庫,以下拿MYSQL數據庫示例:
ginbro gen -u userName -p pwd -a "IP:port" -d databaseName -o "projectName"
上述命令表示連接相應的數據庫,用戶名密碼,對應的庫名。最后是你想生成的工程名稱。
相應的參數:
Flags:
--config string 指定config文件名 (default is $HOME/ginbro.yaml)
-h, --help help for ginbro
-a, --mysqlAddr string MySQL host:port (default "127.0.0.1:3306")
-c, --mysqlCharset string MySQL charset (default "utf8")
-d, --mysqlDatabase string MySQL database name
-p, --mysqlPassword string MySQL password (default "password")
-u, --mysqlUser string MySQL user name (default "root")
工程默認生成到$GOPATH/src目錄下。
工程結構如下:
demo
config/ 配置文件所在目錄
handlers/ 使用gin 生成對http接口
models/ 數據庫表對應的實體
static/ 靜態文件
swagger/ swagger
tasks/ 定時任務相關
main.go 啟動類
config.toml 主配置文件
運行main函數,控制台可以看到swagger的訪問地址:
訪問swagger你能看到給你生成了一些表對應的CRUD的接口。
ginbro 生成app代碼包含功能簡介
-
生成完善RESTful APIs 應用
-
自動生成完善的Swagger文檔
-
自動生成數據庫表的模型和標注
-
支持 JWT Authorization Bearer 身份驗證 and JWT 中間件
-
支持登陸防火牆
-
支持靜態資源替代nginx
-
可配置的跨域cors中間件
-
用戶友好的自定義配置
-
支持定時任務
-
支持圖形工具GUI
-
內置高效率的內存數據庫
依賴框架
go get github.com/gin-contrib/cors
go get github.com/gin-contrib/static
go get github.com/gin-gonic/autotls
go get github.com/gin-gonic/gin
go get github.com/sirupsen/logrus
go get github.com/spf13/viper
go get github.com/spf13/cobra
go get github.com/go-redis/redis
go get github.com/go-sql-driver/mysql
go get github.com/jinzhu/gorm
go get github.com/dgrijalva/jwt-go
gin框架相關,viper配置文件解析框架,gorm數據庫框架。
開發計划
已完成:
- Auth 和 JWT middleware
- 支持一鍵生產jwt密碼驗證
- 分頁總數做mem緩存
- json不現實password等隱私字段
- 生成友好的.gitignore
- go test 單元測試
- 完善go doc
未完成:
- 支持MongoDB數據庫
- 更具體數據映射關聯模型
- 支持PostgreSQL數據庫
- 支持生成gRPC服務
- 更詳細的gorm tag信息
- swaggerDoc參數說明繼續優化
- 支持其他語言框架(php-laravel/lumne ,python flask …)
- sqlite
注意
- mysql表中沒有id/ID/Id/iD字段將不會生成路由和模型
- json字段 在update/create的時候 必須使可以序列號的json字符串(
eg0:"{}" eg1:"[]"
),否則mysql會報錯