Golang 入門系列(十二)ORM框架gorm

以前在已經介紹了用的github.com/go-sql-driver/mysql 訪問數據庫,不太瞭解的能夠看看以前的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html。實際上,爲提升開發效率,通常都會使用一些orm框架,把數據庫層屏蔽,用戶看到的只有對象而無需咱們手動作一些轉換,這樣在使用的時候就很是方便。這種操做方式基本上已經成了標準作法。golang也有不少優秀的orm框架,今天就來介紹介紹gorm。html

爲何要使用orm? 爲何是gorm? gorm 跟其餘框架有什麼不同?這裏就不在介紹了。直接講用法吧。mysql

庫安裝

go get -u github.com/jinzhu/gorm

 

數據庫鏈接

db, err = gorm.Open("mysql", "root:root@tcp(127.0.0.1:3306)/irisapp?charset=utf8&parseTime=True&loc=Local")
if err != nil {
panic("鏈接數據庫失敗")
}

鏈接比較簡單,直接調用 gorm.Open 傳入數據庫地址便可。gorm支持基本上全部主流的關係數據庫,只是鏈接方式上略有不一樣,這裏我用的 mysql爲例吧。git

 

表定義

type Product struct {
    ID        int    `gorm:"primary_key"`
    Code      string `gorm:"type:varchar(20);"`
    Price     int     `gorm:"type:int;"`
    Name      string `gorm:"type:varchar(64);"`
    Mail      string `gorm:"type:varchar(256);"`
    CreatedAt time.Time
}

 

建立表

if !db.HasTable(&Like{}) {
    if err := db.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").CreateTable(&Product{}).Error; err != nil {
      panic(err)
    }
}

直接經過 db.CreateTable 就能夠建立表了,很是方便,還能夠經過 db.Set 設置一些額外的表屬性github

另外,還有自動同步建立表的方法:golang

// 自動遷移模式
db.AutoMigrate(&Product{})

 

查詢

var product Product
db.First(&product, 1) // 查詢id爲1的product
db.First(&product, "code = ?", "ik01001") // 查詢code爲l1212的product

 


插入

// 建立
db.Create(&Product{Code: "ik01001", Price: 1000})

構造已給對象,直接調用 db.Create() 就能夠插入一條記錄。不用拼接sql語句,是否是很方便。sql

 

更新

// 更新 - 更新product的price爲2000
db.Model(&product).Update("Price", 2000)

 

刪除

簡單對象刪除:數據庫

db.Delete(&product)

複雜條件的刪除:微信

if err := db.Where(&Product{ID: 1}).Delete(Product{}).Error; err != nil {
  return err
}

 

事務

func CreateProducts(db *gorm.DB) err {
  tx := db.Begin()
  // 注意,一旦你在一個事務中,使用tx做爲數據庫句柄

  if err := tx.Create(&Product{Code: "ik01003", Price: 3000}).Error; err != nil {
    tx.Rollback()
    return err
  }

  tx.Commit()
  return nil
}

事務的處理也很簡單,用 db.Begin() 聲明開啓事務,結束的時候調用 tx.Commit(),異常的時候調用 tx.Rollback()app

 

最後

 1. 以上就把基本的增刪改查介紹完了,實際使用中還有不少高級的用法,好比關聯查詢,主外鍵設置等。你們能夠看看官方的使用說明: http://gorm.book.jasperxu.com/框架

 2. 因爲空間已經滿了,完整代碼示例代碼下載,能夠關注微信公衆號,下載完整代碼。  

相關文章
相關標籤/搜索