Go之Gorm簡介及使用案例
阿新 • • 發佈:2020-08-08
簡介
ORM
Object-Relationl Mapping, 它的作用是對映資料庫和物件之間的關係,方便我們在實現資料庫操作的時候不用去寫複雜的sql語句,把對資料庫的操作上升到對於物件的操作
Gorm
gorm就是基於Go語言實現的ORM庫。
類似於Java生態裡大家聽到過的Mybatis、Hibernate、SpringData等。
下載使用Gorm庫
下載gorm庫
go get -u github.com/jinzhu/gorm // 這是比較原始的方式,現在有了go mod,我們可以更方便的配置,甚至不用配置。 // 寫好程式碼,在檔案下執行go build,go.mod會自動新增對於gorm的依賴包
CURD
package main import ( "fmt" _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm" "os" "time" ) const ( dbUser string = "test" dbPassword string = "ZHOUjian.22" dbHost string = "121.36.43.223" dbPort int = 3306 dbName string = "cmdb" ) var dsn string = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&loc=Local&parseTime=true", dbUser, dbPassword, dbHost, dbPort, dbName) type User3 struct { // 會從gorm嵌入一些欄位進來 gorm.Model Name string Password string Birthday time.Time Sex bool Tel string Addr string Desc string } type User4 struct { Id int `gorm: "primary_key; auto_increment"` Name string Password string Birthday time.Time Sex bool Tel string Addr string Desc string } func (*User4)TableName() string { return "user" } //type User4 struct { // Id int `gorm:"primary_key"` // Name string `gorm:"type:varchar(32);unique;not null; default:''"` // Password string // Birthday time.Time `gorm:"type:date"` // Sex bool // Tel string `gorm:"column:telephone"` // Addr string // Desciption string `gorm:"type:text"` //} func main() { db, err := gorm.Open("mysql", dsn) if err != nil { fmt.Println(err) os.Exit(-1) } // 建立表 db.AutoMigrate(&User3{}) db.AutoMigrate(&User4{}) // fmt.Println(db.CreateTable(&User3{},&User4{})) //db.Model(&User{}).AddIndex("idx_name_addr", "name", "addr") db.Close() }
判斷表是否存在
// 判斷表是否存在
fmt.Println(db.HasTable(&User3{}))
fmt.Println(db.HasTable("user4"))
db.Close()
刪除表
fmt.Println(db.DropTable(&User3{},&User4{}))
修改表
db.Model(&User3{}).ModifyColumn("birthday","date")
db.Close()
刪除列
db.Model(&User3{}).DropColumn("birthday")
新增刪除索引
db.Model(&User3{}).AddIndex("idx_name","name")
// 聯合索引 db.Model(&User3{}).AddIndex("idx_name_addr","name","addr")
db.Close()
// 刪除索引
db.Model(&User3{}).RemoveIndex("idx_name_addr")
// 建立UniqueIndex索引
db.Model(&User3{}).AddUniqueIndex("idx_name","name")