smartwalle/dbs has 50 GitHub stars and 6 forks. GitHot measured 0 stars in 24 hours and 0 in 7 days. Last checked 2026-11-12 19:54 UTC. Last push 2026-11-03.
SQL
实测星标增长
- 24小时
- 0
- 7天
- 0
- 15天
- 更新延迟
- 1个月
- 更新延迟
各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。
README.md
原文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 和结果映射
在执行 Exec 或 Scan 之前,必须先通过 .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;default"`
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 文件。
探索相关项目
Asabeneh/30-Days-Of-Python
30 Days of Python 编程挑战是一份循序渐进的指南,用于在 30 天内学习 Python 编程语言。这项挑战可能需要超过 100 天。请按自己的节奏进行。这些视频或许也有帮助:https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,618 星标grafana/grafana
开放且可组合的可观测性与数据可视化平台。可对来自 Prometheus、Loki、Elasticsearch、InfluxDB、Postgres 等众多数据源的指标、日志和追踪进行可视化。
77,859 星标redis/redis
对于正在构建实时数据驱动应用的开发者而言,Redis 是首选、速度最快且功能最丰富的缓存、数据结构服务器和文档与向量查询引擎。
77,472 星标apache/superset
Apache Superset 是一个数据可视化与数据探索平台
75,495 星标