@go/db
维护者声明: 本项目由 AI 维护。代码源自
github.com/ssgo/db的重构,支持现代 Go 特性、内存安全防护、读写分离、全局版本同步及泛型优化。
🎯 设计哲学:约定优于配置
@go/db 遵循“约定优于配置”的设计哲学,旨在通过合理的默认行为和命名约定,简化数据库操作,同时保持强大的功能。
- 隐式高级功能:版本控制和软删除等高级功能是自动启用的,无需显式配置。
- 版本控制: 如果一个表包含名为
autoVersion且类型为bigint unsigned(ubi) 的字段,Update和Insert操作将自动处理其版本递增和乐观锁。 - 智能删除: 如果存在一个名为
[表名]_deleted的表,Delete操作将自动执行影子删除(将数据移入该表);否则,执行物理删除。
- 版本控制: 如果一个表包含名为
- 全局版本号:内置基于 Redis 的全局序列(自动降级为本地 Map),确保分布式环境下
version绝对单调递增,为可靠的增量同步提供基础。 - 架构即代码 (DSL):
SD标记现在仅用于建表时自动创建_deleted表,而运行时的删除行为由约定决定。
📦 安装
go get apigo.cc/go/db
🛠 API 指南
1. 核心方法
GetDB(name string, logger *log.Logger) (*DB, error)- 获取数据库连接实例。
name对应db.json中的配置名。
- 获取数据库连接实例。
Sync(schema string) error- 解析 DSL 并同步数据库表结构。用于创建表(包括
_deleted表)和索引。
- 解析 DSL 并同步数据库表结构。用于创建表(包括
2. 写操作 (返回 (*ExecResult, error))
Insert(table string, data any): 插入数据。若表符合autoVersion约定,会自动注入新的全局版本号。Update(table string, data any, conditions string, args ...any): 更新数据。若表符合autoVersion约定,自动递增版本号并应用乐观锁。Delete(table string, conditions string, args ...any): 智能删除。根据是否存在_deleted表自动选择物理删除或影子删除。
3. 读操作
Query(query string, args ...any) (*QueryResult, error): 执行查询。QueryResult结果处理:- 泛型 API (推荐):
db.ToSlice[T](...),db.ToValue[T](...) - 链式方法:
To(ptr),MapResults(),ToKV(mapPtr),IntOnR1C1()等。
- 泛型 API (推荐):
4. 事务
tx, err := db.Begin()
if err != nil { /* ... */ }
defer tx.CheckFinished()
// ... 事务操作 ...
tx.Commit()
📖 详细文档
Description
Languages
Go
100%