Gorm 連接數(shù)據(jù)庫

Golang:Gorm 連接數(shù)據(jù)庫

Golang 寫的灯抛,開發(fā)人員友好的 ORM 庫,當然 Xorm 也非常的優(yōu)秀音瓷,但是我就是不用你看氣人不

image

安裝依賴

go get -u github.com/jinzhu/gorm

連接數(shù)據(jù)庫

func init(){
    var err error

    mysql_conn := fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", "root","wocao", "127.0.0.1", 3306, "iris_blog")

    //賦值給全局變量 Db 沒有 := 就是賦值
    Db, err = gorm.Open("mysql", mysql_conn)
    if err != nil{
        panic(err)
    }
    fmt.Println("初始化數(shù)據(jù)庫成功......")
    Db.LogMode(false)  //是否開啟log
    Db.AutoMigrate( &models.Article{},&models.G_count{}) //自動遷移  跟py一樣
}

定義模型


type Comment struct{
    ID          int
    Content     string      `sql:"not null"`
    Author      string      `sql:"not null"`
}

來一些增刪改查的操作

func (post *Comment) GetCounts() (count int64){
    Db.Model(post).Count(&count)
    return
}

//創(chuàng)建表
func (post *Comment) CreateComments() error{
    return Db.Create(post).Error
}

//獲取全部內容
func (post *Comment) GetComments() (comments []Comment){
    Db.Find(&comments)
    return comments
}

//獲取id為1 的字段
func (post *Comment) GetUser() (comments []Comment, err error) {
    Db.Model(post).Where("id = ?", 1).Find(&comments)
    err = Db.Model(&post).Related(&comments).Error
    return
}

//更新字段
func (post *Comment) UpdateComments() (comments []Comment, err error){
    //Db.Model(post).Update("id",1).Update("author",33333)
    Db.Model(post).Where("id = ?", 1).Updates(map[string]interface{}{"author": 9999,"content":444444,"create_time":time.Now()})
    err = Db.Model(post).Related(&comments).Error
    return
}

//分頁數(shù)據(jù)
func (post *Comment) GetPages(pageSize int,page int) (comments []Comment){
    Db.Where("id >= ?",3).Limit(pageSize).Offset((page-1)*pageSize).Find(&comments)
    return comments
}

//刪除數(shù)據(jù)
func (post *Comment) DeleteComments() (err error) {
    return Db.Where("id = ?", 2).Delete(&post).Error

}

整體看一看

package cap

import (
    "fmt"
    _ "github.com/go-sql-driver/mysql" //初始化驅動
    "github.com/jinzhu/gorm"
    _ "github.com/lib/pq"
    "time"
)


type Comment struct{
    ID          int
    Content     string      `sql:"not null"`
    Author      string      `sql:"not null"`
}

var Db *gorm.DB

func init(){
    var err error

    Db, err = gorm.Open("mysql", "root@/go_test?charset=utf8mb4&parseTime=True&loc=Local")
    if err != nil{
        panic(err)
    }
    fmt.Println("初始化數(shù)據(jù)庫成功......")

    Db.LogMode(true)

    Db.AutoMigrate(&Comment{})
}


func (post *Comment) GetCounts() (count int64){
    Db.Model(post).Count(&count)
    return
}

func (post *Comment) CreateComments() error{
    return Db.Create(post).Error
}

func (post *Comment) GetComments() (comments []Comment){
    Db.Find(&comments)
    return comments
}


func (post *Comment) GetUser() (comments []Comment, err error) {
    Db.Model(post).Where("id = ?", 1).Find(&comments)
    err = Db.Model(&post).Related(&comments).Error
    return
}


func (post *Comment) UpdateComments() (comments []Comment, err error){
    //Db.Model(post).Update("id",1).Update("author",33333)
    Db.Model(post).Where("id = ?", 1).Updates(map[string]interface{}{"author": 9999,"content":444444,"create_time":time.Now()})
    err = Db.Model(post).Related(&comments).Error
    return
}

func (post *Comment) GetPages(pageSize int,page int) (comments []Comment){
    Db.Where("id >= ?",3).Limit(pageSize).Offset((page-1)*pageSize).Find(&comments)
    return comments
}


func (post *Comment) DeleteComments() (err error) {
    return Db.Where("id = ?", 2).Delete(&post).Error

}


如何調用

package main

import (
    "fmt"
    "gorm使用/cap"
)

func main(){


    //定義字段
    comment := cap.Comment{
        Content:"WELCOME TO 鬼子口音 TO WELCOME",
        Author:"鬼子口音",
    
    }
    err := comment.CreateComments()
    if err != nil{
        panic(err)
    }


    c := cap.Comment{}

    comments := c.GetComments()

    for _,p :=  range comments{
        fmt.Println(p.Author,p.Content)
        fmt.Printf("%T",p)
    }

    //err := c.DeleteComments()
    //if err != nil{
    //  panic(err)
    //}
    
    count := c.GetCounts()
    fmt.Println(count)


    lll := c.GetPages(5,3)
    for _,p :=  range lll{
        fmt.Println(p.ID,p.Author)
    }

}

上面只是一些 demo,實際開發(fā)過程中還是建議使用數(shù)據(jù)庫的事務操作,遇到未知的錯誤時進行數(shù)據(jù)庫回滾,以此保證后臺數(shù)據(jù)庫的穩(wěn)定
否則有時候將會出現(xiàn)一些讓人腦仁疼的事情厕鹃,比如造成 mysql 超時死鎖,解決可以參考 http://www.gzky.live/article/詳解MySQL(InnoDB)是如何處理死鎖的

Gorm支持很多的數(shù)據(jù)庫驅動,這里只是演示了 Mysql 的一些操作催训,有了面對對象的數(shù)據(jù)庫操作混稽,一切操作都將變得簡單,維護也更加方便
參考文檔 http://gorm.book.jasperxu.com

哦天吶痘系,該死,我要去吃飯了 .....

歡迎轉載城豁,但要聲明出處雳旅,不然我順著網(wǎng)線過去就是一拳。
個人技術博客:http://www.gzky.live

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末尚蝌,一起剝皮案震驚了整個濱河市衣形,隨后出現(xiàn)的幾起案子苛预,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異周拐,居然都是意外死亡吏够,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門捶枢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵旱捧,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么娜膘? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任爷耀,我火速辦了婚禮咆耿,結果婚禮上,老公的妹妹穿的比我還像新娘吻商。我一直安慰自己,他們只是感情好兄裂,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布溯乒。 她就那樣靜靜地躺著光稼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拾徙,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天藻雌,我揣著相機與錄音做个,去河邊找鬼谤草。 笑死温学,一個胖子當著我的面吹牛,可吹牛的內容都是我干的轧拄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼料按,長吁一口氣:“原來是場噩夢啊……” “哼恢准!你這毒婦竟也來了坠非?” 一聲冷哼從身側響起盟迟,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锣光,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铝耻,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡誊爹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年蹬刷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片频丘。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡办成,死狀恐怖,靈堂內的尸體忽然破棺而出搂漠,到底是詐尸還是另有隱情迂卢,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布桐汤,位于F島的核電站而克,受9級特大地震影響,放射性物質發(fā)生泄漏怔毛。R本人自食惡果不足惜员萍,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拣度。 院中可真熱鬧碎绎,春花似錦、人聲如沸抗果。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冤馏。三九已至日麸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宿接,已是汗流浹背赘淮。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工辕录, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留睦霎,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓走诞,卻偏偏與公主長得像副女,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蚣旱,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內容