这是我参与「第五届青训营 」伴学笔记创作活动的第3天
Gorm介绍
什么是ORM
Object Relational Mapping:对象关系映射
数据库中的表数据和结构体之间具有对应关系 如下图
连接MySQL
//配置MySQL连接参数
username := "root" //账号
password := "123456" //密码
host := "127.0.0.1" //数据库地址,可以是Ip或者域名
port := 3306 //数据库端口
Dbname := "db6" //数据库名
timeout := "10s" //连接超时,10秒
//拼接下dsn参数, dsn格式可以参考上面的语法,这里使用Sprintf动态拼接dsn参数,因为一般数据库连接参数,我们都是保存在配置文件里面,需要从配置文件加载参数,然后拼接dsn。
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)
//连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("连接数据库失败, error=" + err.Error())
}
简单使用
在使用GORM前手动创建数据库db1
package main import ( "fmt" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) // UserInfo 用户信息
type UserInfo struct { ID uint Name string Gender string Hobby string }
func main() { db, err := gorm.Open("mysql", "root:root1234@(127.0.0.1:13306)/db1?charset=utf8mb4&parseTime=True&loc=Local")
if err!= nil{
panic(err) }
defer db.Close() // 自动迁移
db.AutoMigrate(&UserInfo{}) u1 := UserInfo{1, "七米", "男", "篮球"
}
u2 := UserInfo{2, "沙河娜扎", "女", "足球"} // 创建记录
db.Create(&u1) db.Create(&u2) // 查询 var u = new(UserInfo) db.First(u) fmt.Printf("%#v\n", u)
var uu UserInfo db.Find(&uu, "hobby=?", "足球")
fmt.Printf("%#v\n", uu) // 更新
db.Model(&u).Update("hobby", "双色球") // 删除 db.Delete(&u)
}
GORM Model定义
在使用ORM工具时,通常我们需要在代码中定义模型(Models)与数据库中的数据表进行映射,在GORM中模型(Models)通常是正常定义的结构体、基本的go类型或它们的指针。 同时也支持sql.Scanner及driver.Valuer接口(interfaces)。