gorm框架的使用 | 青训营笔记

93 阅读1分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记。

1. gorm框架介绍

gorm官方文档:gorm.io/docs/

什么是orm?

Object-Relationl Mapping,即对象关系映射,这里的Relationl指的是关系型数据库

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

什么是gorm,有什么特点?

gorm是用Golang实现的,GitHub上活跃度很高的orm库

特点:

  • 全功能ORM;
  • 关联(包含一个,包含多个,属于,多对多,多种包含);
  • Callbacks(创建/保存/更新/删除/查找之前/之后);
  • 预加载;
  • 事务
  • 复合主键
  • SQL Builder
  • 自动迁移
  • 日志
  • 可扩展,编写基于GORM回调的插件
  • 每个功能都有测试
  • 开发人员友好

基本操作:

package dao

import (
	"TikTok/constdef"
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

var DB *gorm.DB

type Product struct {
        gorm.Model 
        Code string 
        Price uint 
 }

// Create connection
func Init() {
	var err error
	dsn := "root:123456@tcp(localhost:8080)/Data?charset=utf8mb4&parseTime=True&loc=Local"

	fmt.Println(dsn)
	DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
		DisableForeignKeyConstraintWhenMigrating: true,
	})
	//DB.DB().SetMaxOpenConns(100)
	//DB.DB().SetMaxIdleConns(10)
	if err != nil {
		panic(err)
	}
	DB.AutoMigrate(&product{})

	if err != nil {
		panic(err)
	}

}

// CURD examples
func CURDOp(){
    db.Create(&Product{Code: "L1212", Price: 1000})

	// 查
	var product Product
	db.First(&product, 1) // 找到id为1的产品
	db.First(&product, "code = ?", "L1212") // 找出 code 为 l1212 的产品

	// 改 - 更新产品的价格为 2000
	db.Model(&product).Update("Price", 2000)

	// 删 - 删除产品
	db.Delete(&product)
}