Calude Code编写的Ent ORM 完整指南
本文由claude code生成。作为备忘录和分享,欢迎指正和补充。
一、Ent简介
Ent是一个简单但功能强大的实体框架,用于Go语言,使构建和维护具有大型数据模型的应用程序变得容易。 Ent是由Meta(Facebook)开源团队构建的ORM框架,提供了一个API,用于将任何数据库模式建模为Go对象。
核心特性
Ent的主要特性包括:
- Schema As Code:将任何数据库模式建模为Go对象
- 轻松遍历任何图结构:运行查询、聚合并轻松遍历任何图结构
- 静态类型和显式API:100%静态类型和显式API,通过代码生成实现
- 多存储驱动支持:支持MySQL、PostgreSQL、SQLite和Gremlin
- 易于扩展:使用Go模板简单扩展和自定义
Ent是一个相当新的ORM,使用代码优先的方法,在Go代码中定义模式。Ent之所以流行,是因为它能够优雅地处理复杂的数据模型和关系。
二、快速开始
2.1 安装Ent
# 初始化Go模块
go mod init myapp
# 安装ent CLI工具
go install entgo.io/ent/cmd/ent@latest
# 或者使用go get
go get entgo.io/ent/cmd/ent
2.2 创建第一个Schema
# 创建User实体
ent new User
这会在 ent/schema/ 目录下生成一个基础的schema文件:
package schema
import (
"entgo.io/ent"
"entgo.io/ent/schema/field"
)
// User holds the schema definition for the User entity.
type User struct {
ent.Schema
}
// Fields of the User.
func (User) Fields() []ent.Field {
return []ent.Field{
field.String("name").
NotEmpty(),
field.Int("age").
Positive(),
field.String("email").
Unique(),
field.Time("created_at").
Default(time.Now),
}
}
// Edges of the User.
func (User) Edges() []ent.Edge {
return nil
}
2.3 生成代码
go generate ./ent
2.4 连接数据库并使用
package main
import (
"context"
"log"
"myapp/ent"
_ "github.com/lib/pq" // PostgreSQL
// _ "github.com/go-sql-driver/mysql" // MySQL
// _ "github.com/mattn/go-sqlite3" // SQLite
)
func main() {
// 连接PostgreSQL
client, err := ent.Open("postgres",
"host=localhost port=5432 user=postgres dbname=myapp password=password sslmode=disable")
if err != nil {
log.Fatalf("failed opening connection to postgres: %v", err)
}
defer client.Close()
// 运行自动迁移
if err := client.Schema.Create(context.Background()); err != nil {
log.Fatalf("failed creating schema resources: %v", err)
}
ctx := context.Background()
// 创建用户
user, err := client.User.
Create().
SetName("张三").
SetAge(30).
SetEmail("zhangsan@example.com").
Save(ctx)
if err != nil {
log.Fatalf("failed creating user: %v", err)
}
log.Println("user was created: ", user)
}
2.5 使用SQLite3(非CGO驱动)
📋 使用场景
为什么使用非CGO的SQLite驱动?
评论
?
参与讨论