使用 golang 操做數據庫的同窗都會遇到一個問題 —— 根據數據表結構建立對應的 struct 模型。由於 golang 的使用首字母控制可見範圍,咱們常常要設計 struct 字段名和數據庫字段名的對應關係。長此以往,這是一個很是繁瑣的過程。事情變得繁瑣了,咱們都會想,有沒有好的辦法自動生成 model 呢?今天,記錄一種自動生成代碼的方法 —— xorm 工具。mysql
xorm是一個簡單而強大的Go語言ORM庫. 經過它能夠使數據庫操做很是簡便。我在項目中常用,它的特性以下:git
想了解更多請移步:http://www.xorm.io/github
xorm 是一組數據庫操做命令的工具,包含以下命令:golang
那咱們該如何使用 reverse 命令根據數據表結構生成 go 代碼呢?redis
首先咱們要下載該工具 :sql
go get github.com/go-xorm/cmd/xorm
同時須要安裝對應的 driver :shell
go get github.com/go-sql-driver/mysql //MyMysql go get github.com/ziutek/mymysql/godrv //MyMysql go get github.com/lib/pq //Postgres go get github.com/mattn/go-sqlite3 //SQLite
還須要下載 xorm :數據庫
go get github.com/go-xorm/xorm
編譯 cmd/xorm
會生成 xorm 工具, 假如環境變量。json
cd到安裝路徑
1.cd G:\go_workspace\GOPATH\src\github.com\go-xorm\cmd\xorm
2.go build
3.go build //這樣就生成了xorm.exe緩存
3.xorm reverse postgres 「dbname=test sslmode=disable user=postgres password=123」 templates/goxorm
執行完畢,會在當前路徑cd G:\go_workspace\GOPATH\src\github.com\go-xorm\cmd\xorm下的model文件夾裏
出現test數據庫中,全部表的go model
user.go
package model import ( "time" ) type User struct { Id int `xorm:"not null pk autoincr INTEGER"` Name string `xorm:"VARCHAR(20)"` Created time.Time `xorm:"default 'now()' DATETIME"` ClassId int `xorm:"default 1 INTEGER"` }
class.go
package model type Class struct { Id int `xorm:"not null pk autoincr INTEGER"` Name string `xorm:"VARCHAR(20)"` }
這時候,執行 xorm help reverse
能獲取幫助信息以下:
usage: xorm reverse [-s] driverName datasourceName tmplPath [generatedPath] [tableFilterReg] according database's tables and columns to generate codes for Go, C++ and etc. -s Generated one go file for every table driverName Database driver name, now supported four: mysql mymysql sqlite3 postgres datasourceName Database connection uri, for detail infomation please visit driver's project page tmplPath Template dir for generated. the default templates dir has provide 1 template generatedPath This parameter is optional, if blank, the default value is model, then will generated all codes in model dir tableFilterReg Table name filter regexp
能夠知道,執行參數 -s 表示爲每張表建立一個單獨文件。接下來的參數依次是:驅動,數據源,模板目錄(在源碼的 /cmd/xorm/templates/goxorm
可根據需求定製),生成目錄,表格過濾條件。
接下來咱們以 Mysql 爲例介紹使用方法。
xorm reverse mysql name:password@(ip:port)/xxx?charset=utf8 /cmd/xorm/templates/goxorm
這裏輸出目錄參數省略,會在當前目錄創建一個 model
目錄,該目錄下就是自動生成的 go 代碼,, 駝峯命名方式。具體內容以下:
package model type TestModel struct { Id int `json:"id" xorm:"not null pk autoincr INT(11)"` VpsName string `json:"vps_name" xorm:"VARCHAR(30)"` VpsIp string `json:"vps_ip" xorm:"CHAR(15)"` VpsPrivateIp string `json:"vps_private_ip" xorm:"CHAR(50)"` VpsCpu int `json:"vps_cpu" xorm:"INT(11)"` VpsMem int `json:"vps_mem" xorm:"INT(11)"` VpsDisk int `json:"vps_disk" xorm:"INT(11)"` VpsStatus string `json:"vps_status" xorm:"VARCHAR(255)"` LastHeartTime int `json:"last_heart_time" xorm:"INT(11)"` CreateTime int `json:"create_time" xorm:"INT(11)"` LastTime int `json:"last_time" xorm:"INT(11)"` }
到這裏,就生成了咱們想要的 model , 免去了手寫的繁瑣過程。