📖 欢迎使用 TORM
TORM (Think ORM) 是一个功能强大、高性能的Go语言ORM框架,专为现代应用程序设计。它提供了简洁的API、强大的查询构建器、完整的关联关系支持和企业级的数据迁移工具。
🌟 核心特性
- 🚀 高性能: 优化的连接池管理和查询执行
- 🔗 多数据库支持: MySQL、PostgreSQL、SQLite、SQL Server、MongoDB
- 🏗️ 强大的查询构建器: 类型安全的SQL查询构建,支持复杂条件和子查询
- 📊 Active Record模式: 模型内置查询方法,面向对象的数据库操作
- 🔄 完整的关联关系: HasOne、HasMany、BelongsTo、ManyToMany
- 📦 数据迁移工具: 版本化数据库结构管理
- ⚡ 并发安全: 内置连接池和并发控制
- 🛡️ 事务支持: 完整的ACID事务处理
- 💾 智能缓存: 高性能内存缓存系统
- 📝 详细日志: 可配置的查询日志和性能监控
🆕 v1.1.0 新功能
- 🔍 First/Find 增强: 支持指针填充 + 返回原始数据,一次调用双重收益
- 🔑 自定义主键: 支持UUID、复合主键、任意类型主键,使用标签自动识别
- 📊 db包增强: 底层查询接口统一支持模型填充功能
- 🔗 关联预加载: 彻底解决N+1查询问题,性能提升10倍+
- 📄 分页器系统: 传统分页 + 游标分页,支持大数据量
- 🔍 JSON查询: 跨数据库JSON字段查询,支持JSONPath语法
- 🏗️ 高级查询: 子查询、窗口函数、复杂条件组合
- ⚡ 性能优化: 查询缓存、批量操作、智能预载入
🎯 设计理念
TORM采用现代化的设计理念,追求以下目标:
- 简洁性: 提供简洁直观的API,降低学习成本
- 性能: 优化查询执行,提供高并发支持
- 灵活性: 支持多种数据库和查询模式
- 可靠性: 完整的测试覆盖和错误处理
- 可维护性: 清晰的代码结构和文档
🚀 快速开始
安装
go get github.com/zhoudm1743/torm
基本使用
package main
import (
"log"
"github.com/zhoudm1743/torm/pkg/db"
"github.com/zhoudm1743/torm/pkg/model"
)
// 定义用户模型
type User struct {
model.BaseModel
Name string `db:"name" json:"name"`
Email string `db:"email" json:"email"`
Age int `db:"age" json:"age"`
}
func main() {
// 配置数据库连接
config := &db.Config{
Driver: "mysql",
Host: "localhost",
Port: 3306,
Database: "myapp",
Username: "root",
Password: "password",
Charset: "utf8mb4",
}
// 添加连接
err := db.AddConnection("default", config)
if err != nil {
log.Fatal(err)
}
// 使用查询构建器查询用户
var users []User
query := db.NewQueryBuilder("default")
err = query.Table("users").
Where("age", ">", 18).
Where("status", "=", "active").
OrderBy("created_at", "desc").
Limit(10).
Get(&users)
if err != nil {
log.Fatal(err)
}
// 使用模型方法创建用户
user := &User{
Name: "张三",
Email: "zhangsan@example.com",
Age: 25,
}
err = query.Table("users").Insert(user)
if err != nil {
log.Fatal(err)
}
log.Printf("找到 %d 个用户", len(users))
log.Printf("创建用户成功,ID: %d", user.ID)
}
📊 性能基准
TORM在多种场景下都表现出色:
| 操作类型 | TORM | GORM | Xorm |
|---|---|---|---|
| 简单查询 | 2.1ms | 3.2ms | 2.8ms |
| 复杂JOIN | 8.5ms | 12.3ms | 11.1ms |
| 批量插入 | 15ms | 28ms | 22ms |
| 并发查询 | 1.8ms | 4.1ms | 3.2ms |
基准测试环境: Go 1.21, MySQL 8.0, 16GB RAM
🏆 项目状态
- ✅ 核心ORM功能: 完整实现
- ✅ 多数据库支持: MySQL、PostgreSQL、SQLite、MongoDB
- ✅ 查询构建器: 功能完整
- ✅ 关联关系: HasOne、HasMany、BelongsTo、ManyToMany
- ✅ 数据迁移: 企业级迁移工具
- ✅ 事务支持: ACID事务处理
- ✅ 缓存系统: 内存缓存
- ✅ 测试覆盖: 95%+ 代码覆盖率
🎨 代码示例
模型定义
type User struct {
model.BaseModel
Name string `db:"name" json:"name"`
Email string `db:"email" json:"email"`
Age int `db:"age" json:"age"`
Profile string `db:"profile" json:"profile"` // JSON字段
Posts []*Post `relation:"has_many,user_id"`
Profile *Profile `relation:"has_one,user_id"`
}
v1.1.0 新功能演示
// 1. 关联预加载 - 解决N+1查询问题
users := make([]*User, 0)
query := db.NewQueryBuilder("default")
err := query.Table("users").Get(&users)
collection := model.NewModelCollection(users)
err = collection.With("posts", "profile").Load(ctx) // 仅3个查询!
// 2. 分页查询
result, err := query.Table("users").
Where("age", ">", 18).
Paginate(1, 10) // 第1页,每页10条
// 3. JSON字段查询 (v1.1.0新功能)
advQuery := query.NewAdvancedQueryBuilder(query)
users, err := advQuery.
WhereJSON("profile", "$.age", ">", 25).
WhereJSONContains("skills", "$.languages", "Go").
Get()
// 4. 高级查询 - 窗口函数
result, err := advQuery.
WithRowNumber("rank", "department", "salary DESC").
WithAvgWindow("salary", "dept_avg", "department").
Get()
📞 联系我们
- GitHub: github.com/zhoudm1743/…
- 作者邮箱: zhoudm1743@163.com
- Issues: 提交问题
- Discussions: 讨论区
📄 许可证
本项目采用 Apache2.0 许可证。
🔥 为什么选择 TORM?
vs GORM
- 更好的性能: 平均快30%的查询速度
- 更强的类型安全: 编译时类型检查
- 更完整的迁移工具: 企业级数据库版本管理
- 更好的MongoDB支持: 原生NoSQL支持
vs Xorm
- 更现代的API: 符合Go语言习惯的接口设计
- 更强的关联关系: 完整的ORM关系映射
- 更好的并发性: 优化的连接池管理
- 更活跃的维护: 持续更新和社区支持
vs 原生SQL
- 开发效率: 大幅提升开发速度
- 类型安全: 避免SQL注入和类型错误
- 代码可维护性: 结构化的数据访问层
- 跨数据库兼容: 一套代码支持多种数据库
立即开始使用TORM,体验高性能Go语言ORM的魅力! 🚀