使用xorm工具,根據數據庫自動生成 go 代碼


使用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: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 , 免去了手寫的繁瑣過程。

總結

照例總結一波,引用看到過一句話:

如果一個工具能讓我節省 1s 的時間,我願意花一天的時間去找或者開發這個工具!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM