【gin学习笔记】07初识GROM使用GORM进行数据库操作

本文学习视频https://www.bilibili.com/video/BV1Bz411v78U/?spm_id_from=333.788

gorm中文官方文档 https://jasperxu.com/Programming/Golang/GORM/
另外一个文档 https://learnku.com/docs/gorm/v2/index/9728

什么是orm

  • 一种数据库操作辅助工具
  • 在我们go的结构体和数据库之间产生映射,让我们对数据库的关系,表的内容,直观的体现在结构体上
  • 使用结构体即可完成增删改查操作

如何连接数据库

  1. 引入gorm包 github.com/jinzhu/gorm
  2. 引入mysql驱动包 github.com/go-sql-driver/mysql
  3. 首次建立一个数据库连接,代码如下
package main

import (
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
)

func main() {
	db, err := gorm.Open("mysql",
		"root:123456@/ginclass?charset=utf8mb4&parseTime=True&loc=Local")
	defer db.Close()

	if err != nil {
		panic(err)
	}
}

用grom建表

用db.AutoMigrate去建表,说明:db.AutoMigrate会自动判断表是否存在,如果不存在则建表。

package main

import (
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
)

type HelloWorld struct {
	gorm.Model
	Name string
	Sex  bool
	Age  int
}

func main() {
	db, err := gorm.Open("mysql",
		"root:123456@/ginclass?charset=utf8mb4&parseTime=True&loc=Local")
	defer db.Close()

	if err != nil {
		panic(err)
	}
	//db.AutoMigrate判断是否存在表,如果不存在则自动创建
	db.AutoMigrate(&HelloWorld{})
}

HelloWorld结构体中的gorm.Model是一个包含了ID, CreatedAt, UpdatedAt, DeletedAt四个字段的Golang结构体,建表时会自动创建这些字段。
建表后结构如下
在这里插入图片描述
建完表后来进行一些基本的增删改查操作。

增操作

用db.Create来创建一条数据Name为kaka,Sex为true, Age为21的数据

package main

import (
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
)

type HelloWorld struct {
	gorm.Model
	Name string
	Sex  bool
	Age  int
}

func main() {
	db, err := gorm.Open("mysql",
		"root:123456@/ginclass?charset=utf8mb4&parseTime=True&loc=Local")
	defer db.Close()
	if err != nil {
		panic(err)
	}
	//db.AutoMigrate判断是否存在表,如果不存在则自动创建
	db.AutoMigrate(&HelloWorld{})
	//创建数据
	db.Create(&HelloWorld{
		Name: "kaka",
		Sex:  true,
		Age:  21,
	})
}

运行后可以看到在表中多了一条数据。
在这里插入图片描述
我们再随便创建两条数据来查下。

查操作

  1. db.First方法使用
    我们用db.First来查数据库里的第一条数据
    在这里插入图片描述
    运行后结果如下
    在这里插入图片描述
    指定条件进行查询
    在这里插入图片描述查询结果如下
    在这里插入图片描述
  2. db.Find方法使用
    注意:db.Find的时候要接受的是一个切片的地址
    代码如下
    在这里插入图片描述
    打印结果如下
    在这里插入图片描述
    可以看到不加条件的话db.Find把所有结果都查出来了。
    我们加上where sex = false条件来查询下
    代码如下
    在这里插入图片描述结果如下
    在这里插入图片描述
    一般在实际开发过程中会把where写在前面,示例如下
    在这里插入图片描述
    or语句比较简单可以在where里面写或者db.where().Or.Find()

改操作

db.Update()修改单个字段
将helloworld表中id为1的数据中的name字段的值改成Jack
代码如下
在这里插入图片描述
db.Updates()来修改多个字段
在这里插入图片描述
Updates(HelloWorld{})里面如果是一个空属性,比如age=0,或者Name=“”, 或者sex=false,则这些字段不会被修改。

如果想要修改把字段改成这些空属性,比如将Age改成0,则要加一个map
代码如下
在这里插入图片描述
如果要修改多条数据,比如id in 1,2的都改下
代码如下
在这里插入图片描述
注意First方法里要加切片

删操作

用db.Delete方法
在这里插入图片描述
但是这个删除是软删除,见下图
在这里插入图片描述
删除id为1和2的数据,代码如下
在这里插入图片描述
这个也是软删除,如果想进行硬删除要加上Unscoped()方法
代码如下
在这里插入图片描述

总结

  • 创建连接
    • db, err := gorm.Open(“mysql”,
      “root:123456@/ginclass?charset=utf8mb4&parseTime=True&loc=Local”)
      defer db.Close()
  • 建表
    • 先定义一个结构体比如HelloWorld
    • 然后db.AutoMigrate(&HelloWorld{})来建表
  • 增操作
    • db.Create(&HelloWorld{
      Name: “kaka”,
      Sex: true,
      Age: 21,
      })
    • &HelloWorld{}表示指定哪张表
  • 查操作
    • db.First()来查数据库里的第一条数据
    • db.First()中加where来进行条件查找
    • db.Find()查找,方法中需要指定一个结构体切片
    • db.Where.Find()
  • 改操作
    • db.Update()修改单条数据的单个字段
    • db.Updates()修改单条数据的多个字段
    • db.Updates()将字段修改为0值的方法,比如false, 数字0, 空字符串
    • db.Updates()修改多条数据的方法
  • 删操作
    • db.Delete() 软删除
    • db.Where().Unscoped().Delete()硬删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值