带你快速上手gorm一一基础知识汇总

gorm的引入

orm

即Object-Relational Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。

image-20231104154821181

gorm

gorm 是 go语言的一个orm框架,golang写的,开发人员友好的orm库、

中文文档

GORM官方中文文档

安装gorm命令

go get github.com/jinzhu/gorm

// 下面这个 有时候需要, 有时候不需要
go get github.com/jinzhu/gorm/dialects/mysql@v1.9.16

gorm连接数据库

特别是这里导入的第二包,可以不用,但是不能没有

import (
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql" // 引入mysql驱动
)

func main() {
   
	// 1. 连接数据库。。
	//  第一个参数: 指定要连接的数据库
	// 第二个参数: 指的是数据库的设置信息: 用户名:密码@tcp(ip:端口号)/数据库名字?charset = utf8 & parseTime = True & loc = Local
	// charset = utf8 设置字符集
	// parseTime = True 为了处理time.Time
	// loc = Local 时区设置,与本地时区保持一致
	db, err := gorm.Open("mysql", "root:zhubao@tcp(localhost:3306)/testgorm?charset=utf8&parseTime=True&loc=Local")

	if err != nil {
   
		panic(err) // 如果出错,后续代码 没有必要执行,让程序中断
	}
	// 数据库资源的释放:
	defer db.Close()

}

补充二代gorm引入

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"github.com/redis/go-redis/v9"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

var Conn *gorm.DB

var Rdb *redis.Client

func NewMysql()  {
   
	my := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=True&loc=Local","root","zhubao","127.0.0.1:3306","vote")
	conn ,err := gorm.Open(mysql.Open(my), &gorm.Config{
   })
	if err != nil {
   
		fmt.Printf("err:%s\n", err)
		panic(err)
	}
	Conn = conn
}

对表进行操作

创建表

// 定义结构体:
type User struct {
   
	Age  int
	Name string
}
// 创建表:通常情况下,数据库中新建的表的名字是结构体名字的小写复数形式,例如,结构体User,表名 users
	db.CreateTable(&User{
   })
// 这种情况,可以 自己设定表的名字。
	db.Table("user").CreateTable(&User{
   })

删除表

// 通过 &User{} 指定结构体,删除对应的表
	db.DropTable(&User{
   })
// 通过指定 表名 删除对应的表
	db.DropTable("users")

判断表是否存在

flag := db.HasTable(&User{
   })
flag1 := db.HasTable("user")
fmt.Println(flag, flag1) // 输出 true true

自定义表名

type User struct {
   
	Age  int
	Name string
}

db.CreateTable(&User{
   })

func (User) TableName() string {
    // 给对应结构体返回的表 命名
	return "user"
}

数据增删改查

增加 : 要先创建对应表结构的 结构体,然后创建一个表映射函数,确定是哪个表,然后进行 添加

可以用 RecordNotFound 函数来确定查询结果是否为空

// 定义结构体:
type User struct {
   
	Age  int
	Name string
}

func main() {
   

	db, err := gorm.Open("mysql", "root:zhubao@tcp(localhost:3306)/testgormcharset=utf8&parseTime=True&loc=Local")

	if err != nil {
   
		panic(err) // 如果出错,后续代码 没有必要执行,让程序中断
	}
	// 数据库资源的释放:
	defer db.Close()

	// 增加
	db.Create(&User{
   
		Age:  18,
		Name: "张三",
	})

    // 查询数据 : 第一个参数: 查询出来的数据的载体:
	var myuser User
	db.First(&myuser, "age = ?", 19)
	fmt.Println(myuser)
    
    // 更新数据
	db.Model(&myuser).Update("age", 626)
	db.Model(&myuser).Update("name", "菲菲")
    
    //删除数据
	db.Delete(&myuser)

}

func (User) TableName() string {
   
	return "user"
}

模型名和表名的映射规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值