GORM入门 | 青训营笔记

63 阅读1分钟

GORM介绍

特性

  • 全功能 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…
  • 每个特性都经过了测试的重重考验
  • 开发者友好

GORM基本用法

CRUD

1. 打开(Open)

gorm.open()方法打开一个数据库并返回数据库对象与error信息,第一个参数为driver,driver的Open方法需要传入数据库的DSN

import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)

func main(){
db,err=gorm.open(mysql.Open("user:password\@tcp(127.0.0.1:3306)/hello"),\&gorm.Config{})
}

2. Create

创建单条记录:

user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}  
result := db.Create(&user) // pass pointer of data to Create  

user.ID             // returns inserted data's primary key 
result.Error        // returns error 
result.RowsAffected // returns inserted records count

创建多条记录:

users := []*User{   User{Name: "Jinzhu", Age: 18, Birthday: time.Now()},   User{Name: "Jackson", Age: 19, Birthday: time.Now()}, }
result := db.Create(users) // pass a slice to insert multiple row  

result.Error        // returns error 
result.RowsAffected // returns inserted records count