DB for XORM
DB for XORM 是一个基于 XORM 的数据库访问层库,提供了丰富的数据库操作功能、代码生成工具以及便捷的类型封装。
功能特性
1. 数据库配置管理
- 支持主从数据库配置
- 自动管理数据库连接
- 支持多个数据库实例配置
2. 事务支持
- 提供简单的事务处理接口
- 支持带 Session 的事务处理
- 事务回调机制
3. 数据访问对象(DAO)
- 泛型 DAO 设计,支持任意模型
- 丰富的 CRUD 操作方法
- 支持条件查询、分页查询
- 支持按 ID、Map、Struct 进行数据操作
4. 服务层基类
- 封装主从数据库切换逻辑
- 支持多数据库实例切换
- 便捷的会话管理
5. 代码生成工具
gen:model - 根据数据库表自动生成 Model 代码
gen:service - 根据数据库表自动生成 Service 代码
- 支持自定义类型映射
- 支持表前缀配置
6. 类型封装
Date - 日期类型封装
Datetime - 日期时间类型封装
安装
go get gitee.com/go-libs/db-xorm
快速开始
1. 配置文件
在 config/db.yaml 中配置数据库:
database:
my:
driver: mysql
dsn:
- user:pass@tcp(127.0.0.1)/name?charset=utf8
2. 初始化配置
import "gitee.com/go-libs/db-xorm/db"
func init() {
db.Config.Add("my", &db.Database{
Driver: "mysql",
Dsn: []string{
"user:pass@tcp(127.0.0.1)/name?charset=utf8",
},
})
}
3. 使用 DAO
import "gitee.com/go-libs/db-xorm/db"
// 定义模型
type User struct {
Id int64
Name string
}
// 创建 DAO
userDao := db.NewDao(User{})
// 查询
user, has, err := userDao.GetById(ctx, 1)
// 列表查询
users, err := userDao.ListByMap(ctx, map[string]any{"name": "test"})
// 分页查询
users, total, err := userDao.PagingByMap(ctx, map[string]any{}, 1, 10)
// 新增
newUser, err := userDao.AddByStruct(ctx, &User{Name: "test"})
// 更新
affects, err := userDao.UpdateFieldsById(ctx, map[string]any{"name": "newName"}, 1)
// 删除
affects, err := userDao.DeleteById(ctx, 1)
4. 使用 Service
import "gitee.com/go-libs/db-xorm/db"
type UserService struct {
db.Service
}
func NewUserService() *UserService {
service := &UserService{}
service.With()
return service
}
func (o *UserService) List(ctx context.Context) (list []User, err error) {
var session *db.Session
if session, err = o.Slave(ctx); err != nil {
return
}
err = session.Find(&list)
return
}
5. 事务处理
import "gitee.com/go-libs/db-xorm/db"
err := db.Transaction(ctx, func(ctx context.Context, session *db.Session) error {
// 在这里执行事务操作
_, err := session.Insert(&User{Name: "test"})
return err
})
代码生成
生成 Model
gen:model \
--dsn="user:pass@tcp(127.0.0.1)/database?charset=utf8" \
--model-path="./models" \
--prefix="t_" \
--override
生成 Service
gen:service \
--dsn="user:pass@tcp(127.0.0.1)/database?charset=utf8" \
--service-path="./services" \
--prefix="t_" \
--override
配置类型映射
在 config/console.yaml 中配置字段类型映射:
commands:
gen:model:
fields:
task.status:
pkg: sketch/app
type: app.Status
task.concurrency:
type: int32
task.created_at:
pkg: gitee.com/go-libs/db-xorm/db
type: db.Datetime
types:
date:
pkg: gitee.com/go-libs/db-xorm/db
type: db.Date
datetime:
pkg: gitee.com/go-libs/db-xorm/db
type: db.Datetime
API 参考
Database 类型
| 方法 |
说明 |
GetMaster(ctx) |
获取主库 Session |
GetSlave(ctx) |
获取从库 Session |
GetEngine(keys...) |
获取 EngineGroup |
Add(key, database) |
添加数据库配置 |
DAO[T] 类型
| 方法 |
说明 |
GetById(ctx, value) |
根据 ID 查询 |
GetByMap(ctx, m) |
根据 Map 条件查询 |
GetByStruct(ctx, t) |
根据 Struct 条件查询 |
ListByMap(ctx, m, sorts...) |
条件列表查询 |
ListByStruct(ctx, t, sorts...) |
Struct 条件列表查询 |
PagingByMap(ctx, m, page, size, sorts...) |
条件分页查询 |
PagingByStruct(ctx, t, page, size, sorts...) |
Struct 条件分页查询 |
AddByStruct(ctx, t) |
新增数据 |
DeleteById(ctx, v) |
根据 ID 删除 |
DeleteByMap(ctx, m) |
根据 Map 条件删除 |
UpdateFieldsById(ctx, fields, v) |
根据 ID 更新指定字段 |
UpdateModel(ctx, model) |
更新整个模型 |
Service 类型
| 方法 |
说明 |
Master(ctx) |
获取主库 Session |
Slave(ctx) |
获取从库 Session |
With(sessions...) |
绑定 Session |
WithKey(key) |
指定数据库实例 |
依赖
License
本项目遵循 MIT License。