# db-xorm **Repository Path**: go-libs/db-xorm ## Basic Information - **Project Name**: db-xorm - **Description**: XORM - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-08-12 - **Last Updated**: 2026-02-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## 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` - 日期时间类型封装 ## 安装 ```bash go get gitee.com/go-libs/db-xorm ``` ## 快速开始 ### 1. 配置文件 在 `config/db.yaml` 中配置数据库: ```yaml database: my: driver: mysql dsn: - user:pass@tcp(127.0.0.1)/name?charset=utf8 ``` ### 2. 初始化配置 ```go 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 ```go 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 ```go 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. 事务处理 ```go 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 ```bash gen:model \ --dsn="user:pass@tcp(127.0.0.1)/database?charset=utf8" \ --model-path="./models" \ --prefix="t_" \ --override ``` ### 生成 Service ```bash gen:service \ --dsn="user:pass@tcp(127.0.0.1)/database?charset=utf8" \ --service-path="./services" \ --prefix="t_" \ --override ``` ### 配置类型映射 在 `config/console.yaml` 中配置字段类型映射: ```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)` | 指定数据库实例 | ## 依赖 - [XORM](https://gitea.com/xorm/xorm) - 数据库 ORM 框架 - [go-spring](https://gitee.com/go-spring/go-spring) - 基础框架 ## License 本项目遵循 MIT License。