go 將數據庫轉換為gorm結構

gormt

一款 mysql 數據庫轉 struct 工具

交互界面模式

ui_cn.gif
./gormt -g=true

命令行模式

out.gif
./gormt -g=false

1. 通過當前目錄config.toml文件配置默認配置項

base:
    is_dev : false
out_dir : ./model  # 輸出目錄
url_tag : json # web url tag(json,db(https://github.com/google/go-querystring))
language :  # 語言(English,中 文)
db_tag : gorm # 數據庫標簽(gorm,db)
singular_table : false  # 單表模式:true:禁用表名復數,false:采用表明復數 參考:gorm.SingularTable
simple : false # 簡單輸出(默認gorm標簽不輸出)
is_out_sql : false # 是否輸出 sql 原信息
is_out_func : true # 是否輸出 快捷函數
is_url_tag : true # 是否打web標記
is_foreign_key : true # 是否導出外鍵關聯
is_gui : false # 是否ui模式顯示
mysql_info:
    host : 127.0.0.1
    port : 3306
    username : root
    password : qwer
    database : oauth_db

2. 可以使用命令行工具更新配置項

./gormt -H=127.0.0.1 -d=oauth_db -p=qwer -u=root --port=3306

3. 查看幫助

./gormt -h

-------------------------------------------------------
base on gorm tools for mysql database to golang struct

Usage:
  main [flags]

Flags:
  -d, --database string   數據庫名
  -f, --foreign           是否導出外鍵關聯
  -F, --fun               是否導出函數
  -g, --gui               是否ui顯示模式
  -h, --help              help for main
  -H, --host string       數據庫地址.(注意-H為大寫)
  -o, --outdir string     輸出目錄
  -p, --password string   密碼.
      --port int          端口號 (default 3306)
  -s, --singular          是否禁用表名復數
  -l, --url string        url標簽(json,url)
  -u, --user string       用戶名.
  

4. 支持gorm 相關屬性

  • 數據庫表,列字段注釋支持
  • singular_table 表名復數(大駝峰)
  • json tag json標簽輸出
  • gorm.Model 基本模型 支持gorm.Model模式導出>>>
  • PRIMARY_KEY 將列指定為主鍵
  • UNIQUE 將列指定為唯一
  • NOT NULL 將列指定為非 NULL
  • INDEX 創建具有或不帶名稱的索引, 如果多個索引同名則創建復合索引
  • UNIQUE_INDEX 和 INDEX 類似,只不過創建的是唯一索引
  • 支持外鍵相關屬性 簡單帶外鍵模式導出>>>
  • 支持函數導出(包括:外鍵,關聯體,索引關...)簡單函數導出示例>>>

5. 示例展示

--->導出結果示例
  • 參數:singular_table = false simple = false isJsonTag = true
//  用戶信息
type UserAccountTbl struct {
    ID          int       `gorm:"primary_key;column:id;type:int(11);not null" json:"-"`                                                   //
    Account     string    `gorm:"unique;column:account;type:varchar(64);not null" json:"account"`                                         //
    Password    string    `gorm:"column:password;type:varchar(64);not null" json:"password"`                                              //
    AccountType int       `gorm:"column:account_type;type:int(11);not null" json:"account_type"`                                          //    帳號類型:0手機號,1郵件
    AppKey      string    `json:"app_key" gorm:"unique_index:UNIQ_5696AD037D3656A4;column:app_key;type:varchar(255);not null"`            //    authbucket_oauth2_client表的id
    UserInfoID  int       `gorm:"unique_index:UNIQ_5696AD037D3656A4;index;column:user_info_id;type:int(11);not null" json:"user_info_id"` //
    RegTime     time.Time `gorm:"column:reg_time;type:datetime" json:"reg_time"`                                                          //
    RegIP       string    `gorm:"column:reg_ip;type:varchar(15)" json:"reg_ip"`                                                           //
    BundleID    string    `json:"bundle_id" gorm:"column:bundle_id;type:varchar(255)"`                                                    //
    Describ     string    `gorm:"column:describ;type:varchar(255)" json:"describ"`                                                        //
}
  • 參數:singular_table = false simple = true isJsonTag = false
--->導出結果
//  用戶信息
type UserAccountTbl struct {
    ID          int       `gorm:"primary_key"` //
    Account     string    `gorm:"unique"`      //
    Password    string    //
    AccountType int       //    帳號類型:0手機號,1郵件
    AppKey      string    `gorm:"unique_index:UNIQ_5696AD037D3656A4"`       //  authbucket_oauth2_client表的id
    UserInfoID  int       `gorm:"unique_index:UNIQ_5696AD037D3656A4;index"` //
    RegTime     time.Time //
    RegIP       string    //
    BundleID    string    //
    Describ     string    //
}

更多>>>

6. 支持函數導出(導出函數只是 gorm 的輔助類函數,完全兼容 gorm 相關函數集)

// FetchByPrimaryKey primay or index 獲取唯一內容
func (obj *_UserAccountTblMgr) FetchByPrimaryKey(ID int) (result UserAccountTbl, err error) {
    err = obj.DB.Table(obj.GetTableName()).Where("id = ?", ID).Find(&result).Error
    if err == nil && obj.isRelated {
        {
            var info UserInfoTbl // 用戶信息
            err = obj.DB.Table("user_info_tbl").Where("id = ?", result.UserInfoTblID).Find(&info).Error
            if err != nil {
                return
            }
            result.UserInfoTbl = info
        }
    }

    return
}

更多>>>

函數調用示例>>>

7. 構建

make windows
make linux
make mac

or

go generate

8. 下一步計劃

  • 更新,刪除功能函數添加
  • 優化

9. 提供一個windows 可視化工具

1.png

2.jpg

3.jpg

4.jpg

下載地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,786評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,964評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,354評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,554評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,106評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,918評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,093評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,342評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,839評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,107評論 2 375

推薦閱讀更多精彩內容