# gorm增删改查
| |
| package main |
| |
| import ( |
| "fmt" |
| "gorm.io/driver/mysql" |
| "gorm.io/gorm" |
| "gorm.io/gorm/schema" |
| ) |
| |
| var GLOBAL_DB *gorm.DB |
| |
| func main() { |
| db, err := gorm.Open(mysql.New(mysql.Config{ |
| DSN: "root:root@tcp(127.0.0.1:8889)/test_gorm?charset=utf8mb4&parseTime=True&loc=Local", |
| DefaultStringSize: 256, |
| DisableDatetimePrecision: true, |
| DontSupportRenameIndex: true, |
| DontSupportRenameColumn: true, |
| SkipInitializeWithVersion: false, |
| }), &gorm.Config{ |
| SkipDefaultTransaction: false, |
| NamingStrategy: schema.NamingStrategy{ |
| TablePrefix: "", |
| SingularTable: true, |
| }, |
| DisableForeignKeyConstraintWhenMigrating: true, |
| }) |
| |
| if err != nil { |
| fmt.Println("连接数据库失败:", err.Error()) |
| } |
| |
| GLOBAL_DB = db |
| } |
新增数据
| type User struct { |
| gorm.Model |
| Name string `gorm:"defalut:yiqi"` |
| Age uint8 `gorm:"comment:年龄"` |
| } |
| |
| GLOBAL_DB.AutoMigrate(&User{}) |
| res := GLOBAL_DB.Create(&User{ |
| Name: "颖小主", |
| Age: 18, |
| }) |
| |
| fmt.Println(res.Error, res.RowsAffected) |
| res := GLOBAL_DB.Select("name").Create(&User{ |
| Name: "颖小主", |
| Age: 18, |
| }) |
| res := GLOBAL_DB.Omit("name").Create(&User{ |
| Name: "颖小主", |
| Age: 18, |
| }) |
| res := GLOBAL_DB.Create(&[]User { |
| {Name: "颖小主", Age: 18}, |
| {Name: "itffz", Age: 20}, |
| }) |
查询
| var result map[string]interface{} |
| |
| GLOBAL_DB.Model(&User{}).First(&result) |
| |
| fmt.Println(result) |
| |
| |
| var TestUser User |
| |
| GLOBAL_DB.Model(&User{}).First(&TestUser) |
| fmt.Println(TestUser) |
| var TestUser User |
| |
| GLOBAL_DB.Model(&User{}).Last(&TestUser) |
| fmt.Println(TestUser) |
主键检索
| GLOBAL_DB.Model(&User{}).First(&TestUser, 1) |
| fmt.Println(errors.Is(res.Error, gorm.ErrRecordNotFound)) |
where查询
| GLOBAL_DB.Where("name = ? and age = ?", "itffz", 20).First(&User{}) |
| type TestUser struct { |
| Name string |
| } |
| GLOBAL_DB.Where(TestUser { |
| Name: "itffz", |
| }).First(&User{}) |
| fmt.Println(&User{}) |
| GLOBAL_DB.Where(map[string]interface{} { |
| "name": "颖小主", |
| }).First(&User{}) |
| fmt.Println(&User{}) |
find查询多条数据
| var TestUser []User |
| GLOBAL_DB.Where("name like ?", "%it%").Find(&TestUser) |
| fmt.Println(TestUser) |
更新
update 只更新选择的字段
Updates 更新所有字段 此时有两种形式,一种为map 一种为结构体,结构体零值不参与更新
save 无论如何都更新所有内容,包括0值
| GLOBAL_DB.Model(&User{}).Where("id = ?", 1).Update("name", 123) |
| var users []User |
| res := GLOBAL_DB.Where("id = ?", 1).Find(&users) |
| for k := range users{ |
| users[k].Age = 12 |
| } |
| res.Save(&users) |
| var users User |
| GLOBAL_DB.First(&users).Updates(User{Name:"", Age: 1}) |
| GLOBAL_DB.First(&users).Updates(map[string]interface{} {"Name": "", "Age": 0}) |
删除
| type users []User |
| GLOBAL_DB.Where("id = ?", 1).Delete(&users) |
| GLOBAL_DB.Unscoped().Where("id = ?", 2).Delete(&users) |
原生sql
| var users []User |
| LOBAL_DB.Raw("select * from user where id > ?", 2).Scan(&users) |
| fmt.Println(&users) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)