gorm

对象关系映射(Object Relational Mapping) 模式,是为了解决面向对象与关系数据库(如mysql数据厍)存在的互不匹配的现象的技术。

简单来说, ORM 通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

概述

一个神奇的,对开发人员友好的 Golang ORM 库

  • 全特性 ORM (几乎包含所有特性)
  • 模型关联 (一对一, 一对多,一对多(反向), 多对多, 多态关联)
  • 钩子 (Before/After Create/Save/Update/Delete/Find)
  • 预加载
  • 事务
  • 复合主键
  • SQL 构造器
  • 自动迁移
  • 日志
  • 基于GORM回调编写可扩展插件
  • 全特性测试覆盖
  • 开发者友好

安装

go get -u gorm.io/gorm

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

快速开始

package main

import (
	"log"

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

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

func main() {
	dsn := "username:password@tcp(175.178.69.145:3306)/go_db?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
        log.Fatal(err)
	}

	//自动检查 Product 结构是否变化,变化则进行迁移 (若不存在表,会创建)
	db.AutoMigrate(&Product{})

	// insert
	db.Create(&Product{Code: "what", Price: 1000})

	// select
	var product Product
	db.First(&product, 1)
	db.First(&product, "code = ?", "what")

	// updata
	db.Model(&product).Update("Price", 200)

	// 删
	db.Delete(&product)
}