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`