GORM基础入门使用 | 青训营笔记

141 阅读2分钟

特性

  • 全功能 ORM
  • 关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
  • Create,Save,Update,Delete,Find 中钩子方法
  • 支持 PreloadJoins 的预加载
  • 事务,嵌套事务,Save Point,Rollback To Saved Point
  • Context、预编译模式、DryRun 模式
  • 批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
  • SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
  • 复合主键,索引,约束
  • Auto Migration
  • 自定义 Logger
  • 灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
  • 每个特性都经过了测试的重重考验
  • 开发者友好

安装依赖

首先在终端输入这两行命令下载依赖包

go get -u gorm.io/gorm 
go get -u gorm.io/driver/sqlite

若之前没设置过代理且发生超时请先设置代理(go语言go get指令超时|青训营笔记 - 掘金 (juejin.cn))

创建连接

依赖配置完成后即可使用gorm连接数据库了

package main  
  
import (  
"gorm.io/driver/mysql"  
"gorm.io/gorm"  
)  
  
func main() {  
dsn := "账号名:密码@tcp(127.0.0.1:3306)/数据库名?charset=utf8mb4&parseTime=True&loc=Local"  
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})  
if err != nil {  
panic(err)  
}

将我代码块中的账号名,密码,数据库名替换成自己的就可以了

创建数据表的映射结构

不同于java mybatis的继承接口指定操作数据表, gorm的指定是通过实体类的

type User struct {  
ID uint  
Name string  
Gender uint  
Phone uint  
}

GORM 通常使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,有关蛇形命名法相关可自行查阅. 此时操控表为users,主键为id,其他字段为name, gender,phone

CRUD

user := User{Name: "sam", Gender: 0, Phone: 1234567}  
result := db.Create(&user)  
if result.Error != nil {  
panic(err)  
}

调用create方法并将创建的user对象地址传入来进行增加

db.Delete(&User{}, 10)

删除异曲同工,此处展示通过主键进行删除,若不添加主键则会触发批量删除

db.Model(&User{}).Where("active = ?", true).Update("name", "hello")

//first方法会默认按照主键升序查询到第一个符合的记录
db.First(&user)
//获取一条记录,不指定顺序
db.Take(&user)
//按照主键降序查询到第一个符合条件的记录
db.Last(&user)