Golang 出色的 ORM 库为 GORM。
官网文档:https://gorm.io/docs/
我们来说说增删改查的用法,更深入的研究可以去官网看看。
GORM功能概览:
- 关联(有一个、有多个、属于、多对多、多态性、单表继承)
- 挂钩(创建/保存/更新/删除/查找之前/之后)
- 急切加载Preload,Joins
- 事务、嵌套事务、保存点、RollbackTo 到保存点
- 上下文、准备语句模式、DryRun 模式
- 批量插入、FindInBatches、使用 Map 查找/创建、使用 SQL Expr 和 Context Valuer 进行 CRUD
- SQL 生成器、更新插入、锁定、优化器/索引/注释提示、命名参数、子查询
- 复合主键、索引、约束
- 自动迁移
- 记录器
- 可扩展、灵活的插件 API:Database Resolver(多个数据库、读/写拆分)/Prometheus...
下载依赖
go -u gorm.io/gorm
表Model定义
GORM内置了一个gorm.Model结构体,gorm.Model包含了ID, CreatedAt, UpdatedAt, DeletedAt四个字段。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间。如果表中定义了这种字段,GORM 在创建、更新和删除时会自动填充当前时间。
当然也可以不用gorm.Model,完全自定义创建、更新时间及其格式,这就需要在创建和更新时自己赋值并入库。
// 定义product表,使用gorm.Model结构体
type Product struct {
gorm.Model
Code string
Price uint
}
// 指定product表名
func (Product) TableName() string {
return "product"
}
连接数据库
var db *gorm.DB
// 连接数据库
func ConnDB() {
var (
Username = "root"
Password = "123456"
Endpoint = "localhost:3306"
Database = "aiee"
err error
)
dsn := fmt.Sprintf(
"%s:%s@tcp(%s)/%s?charset=utf8&parseTime=true&loc=L