Golang gorm快速入门实践|青训营

131 阅读1分钟

GORM 简介

一个非常好用的Golang ORM库。

特性

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

实例:

package main
import (
"gorm.io/gorm"
"gorm.io/driver/sqlite"
)
type Product struct {
gorm.Model
Code string
Price uint
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Configf{})
if err != nil {
panic("failed to connect database")
}
//迁移 schema
db.AutoMigrate(&Product{})
//Create
db.Create(&Product{Code:"D42",Price: 101})
//Read
var product Product
db.First(&product,1) // 根据整型主键查找
db.First(&product,"code = ?""D42") // 查找 code 字段值为 D42 的记录Update - 将 product 的 price 更新为 200
db.Model(&product).Update("price"200)
//Update - 更新多个字段
db,Model(&product).Updates(Product{Price: 28,Code:"F42"]) // 仅更新非零值字段
db.Model(&product).Updates(map[string]interface{}{"price": 200,"Code": "F42"})
//Delete - 删除 product
db .Delete(&product,1)
}