这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
连接数据库
dsn := "root:123456@tcp(127.0.0.1:3306)/gorm?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
- 创建表
db.AutoMigrate(&UserInfo{})
u1 := UserInfo{1, "lishuo", "男", "篮球"}
db.Create(&u1)
-
CRUD
db.Create(&u1) var u UserInfo db.First(&u) //查询表中第一条数据 db.Model(&u).Update("name", "hhh") //更新 db.Delete(&u) //删除
增删改查
-
定义模型
type User struct { ID int64 Name string Age int64 } -
把模型与数据库中的表对应起来
db.AutoMigrate(&User{}) -
创建
u := User{ 5,"hh",20} db.Create(&u)-
使用默认值
Name string `gorm:"default:'hhh'"` -
可使用字符串指针的方式将空字符串,加入到数据库中
Name *string `gorm:"default:'hhh'"` u := user(new(string),20)Name sql.NullString `gorm:"default:'hhh'"` u := User{5, sql.NullString{String: "",Valid: true}, 20}
-
-
查询
// 获取第一条记录(主键升序) db.First(&user) // SELECT * FROM users ORDER BY id LIMIT 1; // 获取一条记录,没有指定排序字段 db.Take(&user) // SELECT * FROM users LIMIT 1; // 获取最后一条记录(主键降序) db.Last(&user) // SELECT * FROM users ORDER BY id DESC LIMIT 1; result := db.First(&user) result.RowsAffected // 返回找到的记录数 result.Error // returns error or nil // 检查 ErrRecordNotFound 错误 errors.Is(result.Error, gorm.ErrRecordNotFound)
检索全部对象
// Get all records
result := db.Find(&users)
// SELECT * FROM users;
result.RowsAffected // returns found records count, equals `len(users)`
result.Error // returns error
-
更新
Save会保存所有的字段,即使字段是零值db.First(&user) user.Name = "jinzhu 2" user.Age = 100 db.Save(&user)update
// 条件更新 db.Model(&User{}).Where("active = ?", true).Update("name", "hello") // UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE active=true; // User 的 ID 是 `111` db.Model(&user).Update("name", "hello") // UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE id=111; // 根据条件和 model 的值进行更新 db.Model(&user).Where("active = ?", true).Update("name", "hello") // UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE id=111 AND active=true;
-
删除
- 删除一条记录
// Email 的 ID 是 `10` db.Delete(&email) // DELETE from emails where id = 10; // 带额外条件的删除 db.Where("name = ?", "jinzhu").Delete(&email) // DELETE from emails where id = 10 AND name = "jinzhu";2.根据主键删除
db.Delete(&User{}, 10) // DELETE FROM users WHERE id = 10; db.Delete(&User{}, "10") // DELETE FROM users WHERE id = 10; db.Delete(&users, []int{1,2,3}) // DELETE FROM users WHERE id IN (1,2,3);
原生sql
type Result struct {
ID int
Name string
Age int
}
var result Result
db.Raw("SELECT id, name, age FROM users WHERE name = ?", 3).Scan(&result)
db.Raw("SELECT id, name, age FROM users WHERE name = ?", 3).Scan(&result)
var age int
db.Raw("SELECT SUM(age) FROM users WHERE role = ?", "admin").Scan(&age)
var users []User
db.Raw("UPDATE users SET name = ? WHERE age = ? RETURNING id, name", "jinzhu", 20).Scan(&users)