学习golang(day 16)- gorm进阶 2022-06-04 12:36:00 编程 golang 暂无评论 770 次阅读 2627字 修改时间:2022-06-04 13:01:10 #gorm进阶 **官网中文文档** https://gorm.io/zh_CN/docs/ **orm函数** select : 查询, save :更新或新增 update : 更新 delete :删除 **使用原生sql** db.exec("sql语句") //执行插入删除等操作使用 db.raw("sql语句") //执行查询操作时使用 ```go package main import ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" "log" "time" ) type User struct { gorm.Model Name string `gorm:"comment:名字"` Age int `gorm:"comment:年龄"` Birthday time.Time `gorm:"comment:生日"` } var db *gorm.DB // 创建数据库连接 func createDB() { dsn := "root:root123@tcp(127.0.0.1:3306)/go_db?charset=utf8mb4&parseTime=True" d, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { log.Fatalln(err) } db = d } // 创建表 func createTable() { db.AutoMigrate(&User{}) } func inert1() { db.Create(&User{ Name: "张三1", Age: 18, Birthday: time.Now(), }) db.Create(&User{ Name: "张三2", Age: 18, Birthday: time.Now(), }) db.Create(&User{ Name: "李四", Age: 18, Birthday: time.Now(), }) } // 手动事务控制 func inert2() { tx := db.Begin() tx.Create(&User{Name: "张三1", Age: 18, Birthday: time.Now()}) err := tx.Create(nil).Error // 不能保存空,报错 if err != nil { tx.Commit() }else { tx.Rollback() } } // 自动事务控制 func inert3() { db.Transaction(func(tx *gorm.DB) error { if err := tx.Create(&User{Name: "张三1", Age: 18, Birthday: time.Now()}).Error;err != nil{ return err } // 不能保存空,报错 if err := tx.Create(nil).Error; err != nil { return err } return nil }) } // 查询 func select1() { var users []User db.Select("name", "age").Where("name like ?", "%张三%").Limit(10).Offset(0).Find(&users) for _, user := range users { fmt.Println(user.Name, user.Age) // 输出 : //张三1 18 //张三2 18 } } // 原生sql查询 func select2() { var user User db.Raw("select name,age from users where name = ?", "赵六").Scan(&user) fmt.Println(user.Name, user.Age) // 输出 :赵六 18 } // 先查询,再更新 func update1() { var users []User db.Where("name like ?", "%李四%").Find(&users) for _, user := range users { user.Name = "王五" db.Save(user) } } // 更新单个字段 func update2() { db.Model(&User{}).Where("name = ?", "王五").Update("name", "赵六") } // 删除 func delete1() { db.Delete(&User{}, 1) // 根据主键逻辑删除 db.Unscoped().Delete(&User{}, 1) // 物理删除 db.Exec("delete from users where id = ?", 1) // 原生sql执行删除 } func main() { createDB() createTable() //inert1() //select1() //update1() //update2() //delete1() //select2() //inert2(); inert3() } ``` 标签: golang
评论已关闭