Gorm学习|青训营笔记

47 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

Gorm

声明模型

首先定义一个实体。

在Gorm中遵循约定大于规范

此处的约定:

  1. ID 一般为主键名。
  2. CreateAt,UpdateAt,DeletedAt 分别是创建该行数据的时间,更新该函数据的时间,删除该行数据的时间。
  3. DeletedAt在刚创建数据的时候为null。软删除该数据的时候会加上删除该数据的时间。表示该数据以及删除。
  4. 如果没有对该实体设置对应的表的名字,则该实体对应的表的名字为该结构体的蛇形复数也就是User->users
package entity

import (
	"gorm.io/gorm"
)

type User struct {
	ID   uint
	Name string
	Age  uint8
	//gorm.Model  中的字段名对应到数据库分别是: `created_at`,`updated_at`,`deleted_at`,`id`
	// deleted_at 在刚创建的时候是null,但是被软删除的时候会填入删除的时候的时间
	gorm.Model
}

func (User) TableName() string {
	// 设置在gorm中该表的对应的表名
	return "users"
}

CRUD接口

首先先与数据库建立连接

//	"用户名:密码@tcp(地址:端口)/数据库名"
var dsn = "root:root@tcp(127.0.0.1:3306)/studygorm?charset=utf8mb4&parseTime=True&loc=Local"

// 基于dialector打开初始化db会话
var db, _ = gorm.Open(mysql.Open(dsn), &gorm.Config{})

增加

传入一个User实体,gorm会根据该实体的字段将其添加到数据库

db.Create也可以传入一个切片进行批量插入。

func CreateUser(user entity.User) entity.User { //传入user
	//创建user
	db.Create(&user)
	return user
}

删除

删除。

传入一个结构体变量,gorm根据该结构体的主键ID对数据库对应的主键进行删除。

也可以传入一个结构体的指针,并指定主键的ID进行删除。

其中,可以通过tx.RowsAffected来判断删除的条数。从而判断是否删除成功。

func DeleteUser(user entity.User) bool {

	//根据结构体,以及指定的主键删除user
	//db.Delete(&entity.User{}, 1)

	//根据结构体,以及指定的主键数组删除user
	//db.Delete(&entity.User{}, []int{1,2,3})

	//根据实体对应的主键 删除user 。并附加错误处理
	tx := db.Delete(&user)
	//如果删除之后的rowsAffected==0则说明没有成功删除
	if tx.RowsAffected == 0 {
		return false
	}
	return true
}

查找

最简单的查找方法是使用db.First(),它将会查找出符合条件的第一条记录

func GetUser(i uint) entity.User {
	user := entity.User{ID: i}
	db.First(&user)
	return user
}

也可以使用链式查询进行查询。

更新

更新。

注意:如果一行数据被软删除了,那么再次更新或者插入该数据对应的主键都会失败!

func UpdateUser(user entity.User) bool {
	//保存所有字段,即使该字段是零值
	tx := db.Save(&user)
	if tx.RowsAffected == 0 {
		return false
	}
	return true
}