Skip to content

shrek82/jorm

Repository files navigation

jorm

并非所有开发者都需要功能复杂、学习成本高昂的数据库框架。jorm的专业级功能配置得恰到好处,简洁的API能帮你轻松完成数据操作,又不会因为配置过于复杂令人望而却步。

这款轻量级的ORM库是进行CRUD操作、链式查询、事务管理的快捷工具。它还提供了模型绑定、SQL缓存、连接池等丰富的功能特性,以及非侵入式的钩子系统,让你在业务逻辑中仍可灵活控制数据流程。

特性

  • 轻量高效:核心依赖最少,代码精简,性能优化
  • 链式操作:流畅的 API 设计,支持链式调用
  • 类型安全:基于反射的动态类型处理,编译时检查
  • 多数据库支持:支持 MySQL、PostgreSQL、SQLite、Oracle、SQL Server
  • 事务管理:提供函数式事务支持,自动提交/回滚
  • 钩子函数:支持 Before/After 操作钩子
  • 连接池:内置连接池管理,支持重试机制
  • 自动迁移:支持基于模型的表结构自动创建和更新
  • 关联预加载:支持 BelongsTo、HasOne、HasMany、ManyToMany 关系预加载
  • 数据验证:内置数据验证器,支持多种验证规则
  • Context 支持:支持超时控制和操作取消

安装

go get github.com/shrek82/jorm

快速示例

package main

import (
    "github.com/shrek82/jorm/core"
    _ "github.com/mattn/go-sql-driver/mysql"
)

type User struct {
    ID        int64     `jorm:"pk;auto"`
    Name      string    `jorm:"size:100 notnull"`
    Email     string    `jorm:"size:100 unique"`
    CreatedAt time.Time `jorm:"auto_time"`
}

func main() {
    db, err := core.Open("mysql", "user:password@/dbname", &core.Options{
        MaxOpenConns: 10,
        MaxIdleConns: 5,
    })
    if err != nil {
        panic(err)
    }
    defer db.Close()

    db.AutoMigrate(&User{})

    user := &User{Name: "Alice", Email: "alice@example.com"}
    id, _ := db.Model(user).Insert(user)
    fmt.Println("Inserted ID:", id)
}

详细文档

查看 docs/ 目录获取完整的使用手册:

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

About

golang orm

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages