Object-Relationl Mapping, 它的做用是映射數據庫和對象之間的關係,方便咱們在實現數據庫操做的時候不用去寫複雜的sql語句,把對數據庫的操做上升到對於對象的操做mysql
gorm就是基於Go語言實現的ORM庫。git
相似於Java生態裏你們聽到過的Mybatis、Hibernate、SpringData等。github
go get -u github.com/jinzhu/gorm // 這是比較原始的方式,如今有了go mod,咱們能夠更方便的配置,甚至不用配置。 // 寫好代碼,在文件下執行go build,go.mod會自動添加對於gorm的依賴包
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")
package main import ( "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" ) type User struct { ID int Name string Gender bool Tel string Height float32 } func main() { // 0. 導入包 // 1. 註冊驅動 // 2. 註冊數據庫 // 3. 定義數據模型 model // 4. 註冊數據模型 // 5. 操做 // 同步表結構 // 數據: 增,刪,改,查 dsn := "test:youmen.18@tcp(1.1.1.1:3306)/cmdb?charset=utf8mb4&parseTime=true&loc=PRC" orm.RegisterDriver("mysql", orm.DRMySQL) orm.RegisterDataBase("default", "mysql", dsn) // 建立User表 orm.RegisterModel(new(User)) orm.RunCommand() }
// 將orm要建立的表呈現爲sql go run beego_rom.go orm sqlall -- -------------------------------------------------- -- Table Structure for `main.User` -- -------------------------------------------------- CREATE TABLE IF NOT EXISTS `user` ( `i_d` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(255) NOT NULL DEFAULT '' , `gender` bool NOT NULL DEFAULT FALSE , `tel` varchar(255) NOT NULL DEFAULT '' , `height` double precision NOT NULL DEFAULT 0 ) ENGINE=InnoDB; // 同步數據庫 // -force 強制建立,先刪在建立 // -v verbose info 建立過程將建立的表sql打印出來 go run beego_rom.go orm syncdb table `user1` already exists, skip add column `main.User1.Salary` for table `user1`