db-xorm

module
v1.3.19 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 19, 2026 License: Apache-2.0

README

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。

Directories

Path Synopsis
_examples
simple command
db
src

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL