使用xorm工具,根據資料庫自動生成 go 程式碼
阿新 • • 發佈:2018-12-04
使用xorm工具,根據資料庫自動生成 go 程式碼
引入
使用 golang 操作資料庫的同學都會遇到一個問題 —— 根據資料表結構建立對應的 struct 模型。因為 golang 的使用首字母控制可見範圍,我們經常要設計 struct 欄位名和資料庫欄位名的對應關係。久而久之,這是一個非常繁瑣的過程。事情變得繁瑣了,我們都會想,有沒有好的辦法自動生成 model 呢?今天,記錄一種自動生成程式碼的方法 —— xorm 工具。
關於 xorm
xorm是一個簡單而強大的Go語言ORM庫. 通過它可以使資料庫操作非常簡便。我在專案中經常使用,它的特性如下:
- 支援Struct和資料庫表之間的靈活對映,並支援自動同步表結構
- 事務支援
- 支援原始SQL語句和ORM操作的混合執行
- 使用連寫來簡化呼叫
- 支援使用Id, In, Where, Limit, Join, Having, Table, Sql, Cols等函式和結構體等方式作為條件
- 支援級聯載入Struct
- 支援LRU快取(支援memory, memcache, leveldb, redis快取Store) 和 Redis快取
- 支援反轉,即根據資料庫自動生成xorm的結構體
- 支援事件
- 支援created, updated, deleted和version記錄版本(即樂觀鎖)
想了解更多請移步:http://www.xorm.io/
xorm 工具
xorm 是一組資料庫操作命令的工具,包含如下命令:
- reverse 反轉一個數據庫結構,生成程式碼
- shell 通用的資料庫操作客戶端,可對資料庫結構和資料操作
- dump Dump資料庫中所有結構和資料到標準輸出
- source 從標註輸入中執行SQL檔案
- driver 列出所有支援的資料庫驅動
那我們該如何使用 reverse 命令根據資料表結構生成 go 程式碼呢?
首先我們要下載該工具 :
go get github.com/go-xorm/cmd/xorm
同時需要安裝對應的 driver :
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 工具, 假如環境變數。
這時候,執行 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:[email protected](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 , 免去了手寫的繁瑣過程。