gorm普通的增删改查

简介: gorm普通的增删改查

创建

创建

  • 单独创建----db.Create(&模型)
  • 指定字段----在Create之前使用Select
  • 跳过字段----在Create之前使用Omit
  • 批量创建----db.Create(&[]模型)
type User struct {
  gorm.Model
  Name string
  Age  uint8 `gorm:"comment:年龄"`
}
func main() {
  db, _ := gorm.Open(mysql.New(mysql.Config{DSN: "root:123456@tcp(127.0.0.1:3306)/gormDB?charset=utf8mb4&parseTime=True&loc=Local"}), &gorm.Config{})
  db.AutoMigrate(&User{})
  user := User{
    Name: "wxf",
    Age:  20,
  }
  //单独创建
  db.Create(&user)
  //指定字段,只创建name字段
  db.Debug().Select("name").Create(&user)
  //跳过,忽略字段
  db.Debug().Omit("name").Create(&user)
  //批量创建
  sliU := make([]User, 0)
  db.Debug().Create(sliU)
  //返回一个*DB,这里面会返回错误,和影响的条数
  dbres := db.Debug().Create(sliU)
  fmt.Println(dbres.Error, dbres.RowsAffected)
}

查询

查询

  • 接收返回值的形式
  1. Map Map[string]interface{} []Map[string]interface{}
  2. 结构体
  3. 返回多条,用切片接收
  • 查询主键排序后的第一条 db.First
  • 查询第一条(不排序) db.Take
  • 查询主键排序后的最后一条 db.Last
  • 条件
  1. 主键索引
  2. String条件 where
  3. Struct Map(可以加入一个有内容的结构体作为条件,也可以使用一个key为数据库表字段的map)
  1. 内联条件 省略where,直接在得到结果的First等后面写条件
  • Select指定条件
  • join后续会写

First 和 Last 会根据主键排序,分别查询第一条和最后一条记录。 只有在目标 struct 是指针或者通过db.Model() 指定 model 时,该方法才有效。 此外,如果相关 model 没有定义主键,那么将按 model 的第一个字段进行排序。 例如:

result := make(map[string]interface{})
db.Model(&User{}).First(&result)
fmt.Println(result)
var result User
db.Model(&User{}).First(&result)
fmt.Println(result)

主键检索:

//主键检索
dbres:=db.Model(&User{}).First(&result,22)
errors.Is(dbres.Error,gorm.ErrRecordNotFound)

String条件

//Where
db.Model(&User{}).Where("name=?", "wxf").First(&result)
fmt.Println(result)

Struct & Map

//Struct & map
db.Model(&User{}).Where(User{Name: "wxf"}).First(&result)
db.Model(&User{}).Where(map[string]interface{}{"name":"wxf"}).First(&result)
fmt.Println(result)


内联条件并且返回多条

var result []User
db.Find(&result, "name=?", "wxf")
db.Find(&result, User{Name: "wxf"})
db.Find(&result, map[string]interface{}{"name": "wxf"})
fmt.Println(result)

Select指定字段,Omit同理

var result []User
db.Select("name").Where("name LIKE ?","%x%").Find(&result)

有时候一个User表中有100个字段,但是我只想要它的name和age字段,能否屏蔽别的字段呢?答案是可以的,但是因为UserInfo是我们定义的返回结构体,所以需要在Find前面指定是哪个表结构

type UserInfo struct {
  Name string
  Age  int
}
var userinfo []UserInfo
db.Model(&User{}).Find(&userinfo)
fmt.Println(userinfo)

更新

更新

  • update 更新一个字段
  • updates 更新多个字段
  1. map :使用 map 更新多个属性,只会更新其中有变化的属性
  2. struct :当通过 struct 更新时,GORM 只会更新非零字段
  • Save 无论如何都更新,包括零值

Save的批量更新

var users []User
dbres := db.Where("name = ?", "wxf").Find(&users)
for i := range users {
  users[i].Age = 21
}
dbres.Save(&users)

updates

var users User
db.Where("name=?", "wxf").First(&users).Updates(User{Name: "testWxf", Age: 18})

删除

删除

  • 用法同Find First等
  • 软删除:deleteat字段存在则会软删除
  • Unscoped():硬删除,忽略软删除进行查询
var user User
//存在delete at字段,软删除
db.Where("name=?", "wxf").First(&user).Delete(&user)
//硬删除,跳过delete at字段的约束
db.Unscoped().Where("name=?", "wxf").First(&user).Delete(&user)

原生SQL

SQL 构建器

var user User
var users []User
db.Raw("update users set name=?", "hhh").Scan(&user)
fmt.Println(user)
db.Raw("select * from users").Scan(&users)
fmt.Println(users)




目录
相关文章
|
11月前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
926 77
|
11月前
|
XML 数据库 Android开发
Android数据库的使用(增删改查)
本文介绍了一个简单的数据库操作Demo,包含创建数据库、增删改查功能。通过5个按钮分别实现创建数据库、插入数据、删除数据、更新数据和查询数据的操作。代码结构清晰,适合初学者学习Android SQLite数据库基础操作。
343 5
|
11月前
|
数据库 Android开发 开发者
Android常用的room增删改查语句(外部数据库)
本文分享了将一个原生数据库驱动的单词APP重构为使用Room库的过程及遇到的问题,重点解决了Room中增删改查的常用语句实现。文章通过具体示例(以“forget”表为例),详细展示了如何定义实体类、Dao接口、Database类以及Repository和ViewModel的设计与实现。同时,提供了插入、删除、更新和查询数据的代码示例,包括模糊查询、分页加载等功能。此外,针对外部数据库导入问题,作者建议可通过公众号“计蒙不吃鱼”获取更多支持。此内容适合有一定Room基础的开发者深入学习。
321 0
Android常用的room增删改查语句(外部数据库)
|
关系型数据库 MySQL 数据库连接
Unity连接Mysql数据库 增 删 改 查
在 Unity 中连接 MySQL 数据库,需使用 MySQL Connector/NET 作为数据库连接驱动,通过提供服务器地址、端口、用户名和密码等信息建立 TCP/IP 连接。代码示例展示了如何创建连接对象并执行增删改查操作,确保数据交互的实现。测试代码中,通过 `MySqlConnection` 类连接数据库,并使用 `MySqlCommand` 执行 SQL 语句,实现数据的查询、插入、删除和更新功能。
|
SQL 关系型数据库 API
HarmonyOs开发:关系型数据库封装之增删改查
每个方法都预留了多种调用方式,比如使用callback异步回调或者使用Promise异步回调,亦或者同步执行,大家在使用的过程中,可以根据自身业务需要进行选择性调用,也分别暴露了成功和失败的方法,可以针对性的判断在执行的过程中是否执行成功。
562 13
|
SQL 关系型数据库 MySQL
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
本文介绍了在ThinkPHP6框架中如何连接和使用数据库进行增删改查操作。内容包括配置数据库连接信息、使用Db类进行原生MySQL查询、find方法查询单个数据、select方法查询数据集、save方法添加数据、insertAll方法批量添加数据、insertGetId方法添加数据并返回自增主键、delete方法删除数据和update方法更新数据。此外,还说明了如何通过数据库配置文件进行数据库连接信息的配置,并强调了在使用Db类时需要先将其引入。
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
|
SQL 关系型数据库 MySQL
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
课程分类查询、课程新增、统一异常处理、统一封装结果类、JSR303校验、修改课程、查询课程计划、新增/修改课程计划
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
|
存储 NoSQL API
使用Py2neo进行Neo4j图数据库的增删改查操作
使用Py2neo进行Neo4j图数据库的增删改查操作
761 5
|
数据可视化 API PHP
低代码开发工具-学生管理系统-老师管理增删改查实现
低代码开发工具-学生管理系统-老师管理增删改查实现
272 5
|
前端开发 Java 数据库连接
javamvc配置,增删改查,文件上传下载。
【10月更文挑战第4天】javamvc配置,增删改查,文件上传下载。
164 1

热门文章

最新文章

下一篇
开通oss服务