非零基础快速入门Go 语言数据库中间件_ GORM

本文提供非零基础快速入门Go语言数据库中间件GORM的指南,涵盖模型定义、创建、查询、更新和删除等基本操作。GORM是一个全功能ORM框架,通过约定优于配置的方式简化数据库操作。文章详细解释了如何进行记录的增删改查,并提供了各种查询条件、排序、分页等高级功能的示例。
摘要由CSDN通过智能技术生成

非零基础快速入门Go 语言数据库中间件_ GORM

Java中有 Mybatis Go 中自然有与之对标的中间件 GORM

本文参考 Gorm 官网,以最快的速度上手 Go针对数据库的增删改查

由于现在针对数据库中间件更多只是使用其单表功能 因为让数据库做复杂运算会造成性能压力 所以我们更多的将数据的运算下放到业务逻辑中处理 所以我抛去了很多中间件的高级特性

GORM 是一个全功能 ORM (Object/Relation Mapping)框架

说是 ORM 框架,我们自然先声明出我们的 Obeject

模型定义

模型是标准的 struct

type User struct {
   
  ID           uint    
  Name         string
  Email        *string
  Age          uint8
  Birthday     *time.Time
  MemberNumber sql.NullString
  ActivatedAt  sql.NullTime
  CreatedAt    time.Time
  UpdatedAt    time.Time
}

约定大于配置

GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAtUpdatedAt 字段追踪创建、更新时间

遵循 GORM 已有的约定,可以减少您的配置和代码量

创建

创建记录

//Object
user := User{
   Name: "Jinzhu", Age: 18, Birthday: time.Now()}
//通过数据的指针来创建
result := db.Create(&user) 

user.ID             // 返回插入数据的主键
result.Error        // 返回 error
result.RowsAffected // 返回插入记录的条数

批量插入

要有效地插入大量记录,请将一个 slice 传递给 Create 方法。 将切片数据传递给 Create 方法,GORM 将生成一个单一的 SQL 语句来插入所有数据,并回填主键的值,钩子方法也会被调用。

var users = []User{
   {
   Name: "jinzhu1"}, {
   Name: "jinzhu2"}, {
   Name: "jinzhu3"}}
db.Create(&users)

for _, user := range users {
   
  user.ID // 1,2,3
}

查询

检索单个对象

GORM 提供了 FirstTakeLast 方法,以便从数据库中检索单个对象。当查询数据库时它添加了 LIMIT 1 条件,且没有找到记录时,它会返回 ErrRecordNotFound 错误

如果你想避免ErrRecordNotFound错误,你可以使用Find,比如db.Limit(1).Find(&user)Find方法可以接受struct和slice的数据。

First, Last方法将按主键排序查找第一/最后一条记录,只有在用struct查询或提供model value时才有效,如果当前model没有定义主键,将按第一个字段排序,例如:

用主键检索

如果主键是数值类型

db.First(&user, 10)
// SELECT * FROM users WHERE id = 10;

db.Find(&users, []int{
   1,2,3})
// SELECT * FROM users WHERE id IN (1,2,3);

如果主键是像 uuid 这样的字符串,您需要这要写:

db.First(&user, "id = ?", "1b74413f-f3b8-409f-ac47-e8c062e3472a")
// SELECT * FROM users WHERE id = "1b74413f-f3b8-409f-ac47-e8c062e3472a";

检索全部对象

// 获取全部记录
result := db.Find(&users)
// SELECT * FROM users;

result.RowsAffected // 返回找到的记录数,相当于 `len(users)`
result.Error        // returns error

添加查询条件

// 获取第一条匹配的记录
db.Where("name = ?", "jinzhu").First(&user)
// SELECT * FROM users WHERE name = 'jinzhu' ORDER BY id LIMIT 1;

// IN
db.Where("name IN (?)", []string{
   "jinzhu", "jinzhu 2"}).Find(&users)
// SELECT * FROM users WHERE name IN ('jinzhu','jinzhu 2');

// LIKE
db.Where("name LIKE ?", "%jin%").Find(&users)
// SELECT * FROM users WHERE name LIKE '%jin%';

// AND
db.Where("name = ? AND age >
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值