Skip to content

Latest commit

 

History

History
164 lines (120 loc) · 3.97 KB

File metadata and controls

164 lines (120 loc) · 3.97 KB

DBS

dbs 是一个轻量级的 Go 语言数据库操作辅助库,旨在简化 SQL 构建、结果集映射以及数据库事务管理。它提供了一个直观的内部 DSL 来构建复杂的 SQL 查询,并能自动将查询结果映射到 Go 结构体、Map 或基础类型。

特性

  • 直观的 SQL 构建器:支持 SELECT, INSERT, UPDATE, DELETE 语句构建。
  • 结果集映射 (Mapper):自动将 sql.Rows 映射到结构体(支持嵌套)、Map 以及切片。
  • 事务管理:支持简单的事务封装和 Context 集成,方便在多个 Repository 间共享事务。
  • Repository 模式:内置通用的 Repository 实现,快速实现基础的增删改查。
  • 灵活的扩展性:支持自定义 Logger、Dialect(方言)和 Mapper 标签。

安装

go get -u github.com/smartwalle/dbs

快速开始

初始化数据库连接

import (
    "github.com/smartwalle/dbs"
    "github.com/smartwalle/dbs/dialect/postgres"
    _ "github.com/lib/pq" // 导入驱动
)

db, err := dbs.Open("postgres", "host=127.0.0.1 port=5432 user=postgres password=postgres dbname=test sslmode=disable", 10, 10)
if err != nil {
    panic(err)
}
defer db.Close()

// 设置方言(Dialect)
db.UseDialect(postgres.Dialect())

使用 SQL 构建器

dbs 提供了一组构建器,用于生成 SQL 语句。所有构建器都支持通过 .SQL() 方法获取生成的 SQL 字符串和参数。

查询 (SELECT)

var sb = dbs.NewSelectBuilder()
sb.Selects("id", "name", "age")
sb.From("user")
sb.Where("age > ?", 18)
sb.OrderBy("id DESC")
sb.Limit(10)

// 获取构建好的 SQL 和参数
query, args, err := sb.SQL()

插入 (INSERT)

var ib = dbs.NewInsertBuilder()
ib.Table("user")
ib.Columns("name", "age")
ib.Values("smartwalle", 20)

// 获取构建好的 SQL 和参数
query, args, err := ib.SQL()

更新 (UPDATE)

var ub = dbs.NewUpdateBuilder()
ub.Table("user")
ub.Set("name", "new_name")
ub.Set("age", 25)
ub.Where("id = ?", 1)

// 获取构建好的 SQL 和参数
query, args, err := ub.SQL()

删除 (DELETE)

var rb = dbs.NewDeleteBuilder()
rb.Table("user")
rb.Where("id = ?", 1)

// 获取构建好的 SQL 和参数
query, args, err := rb.SQL()

执行 SQL 和结果映射

在执行 ExecScan 之前,必须先通过 .UseSession() 方法为构建器设置一个会话(Session),该会话可以是 *dbs.DB*dbs.Tx

执行更新操作 (INSERT/UPDATE/DELETE)

var ub = dbs.NewUpdateBuilder()
ub.Table("user")
ub.Set("name", "smart")
ub.Where("id = ?", 1)

// 设置 Session 并执行
result, err := ub.UseSession(db).Exec(context.Background())

执行查询并映射结果 (SELECT)

type User struct {
    Id   int    `sql:"id"`
    Name string `sql:"name"`
    Age  int    `sql:"age"`
}

var user *User
var sb = dbs.NewSelectBuilder()
sb.Selects("*").From("user").Where("id = ?", 1)

// 设置 Session 并自动映射到结构体
err := sb.UseSession(db).Scan(context.Background(), &user)

事务管理

dbs 支持通过 Transaction 方法方便地处理事务:

err := db.Transaction(context.Background(), func(ctx context.Context) error {
    // 在事务中执行操作
    // 所有的构建器只需 UseSession(db.Session(ctx)) 即可自动参与到当前事务中
    return nil
})

使用 Repository 模式

// 1. 定义实体
type User struct {
    Id   int    `sql:"id;auto_increment"`
    Name string `sql:"name"`
}

func (u *User) TableName() string { return "user" }
func (u *User) PrimaryKey() string { return "id" }

// 2. 创建 Repository
var userRepo = dbs.NewRepository[User](db)

// 3. 基础操作
user, err := userRepo.Find(context.Background(), 1, "*")
result, err := userRepo.Create(context.Background(), &User{Name: "test"})

更多示例

请参考 examples 目录下的详细示例。

许可证

本项目采用 MIT 许可证。详见 LICENSE 文件。