• 简介
  • 核心包目录
  • model层规划
  • 注入DB对象
  • 获取DB对象
  • Git仓库
  • XORM文档
  • 特性
  • 驱动支持

    简介

    目前数据库使用开源的ORM组件库:XORM。

    核心包目录

    github.com/qit-team/snow-core/db

    model层规划

    • app/models/model.go 基础Moel层,业务Mode层会继承它。
    • app/models/xxxmodel/xxx.go 业务Model层,继承基础Model层。

    注入DB对象

    要求必须先注入再获取,提供资源复用,不要直接调用New去重复实例化资源。

    注入示例:

    1. ## 代码路径pkg/db/provider.go
    2. func (p *Provider) Register(args ...interface{}) error {
    3. conf := args[0].(*config.Config)
    4. db, err := NewEngineGroup(conf.Db)
    5. if err != nil {
    6. return err
    7. }
    8. container.App.SetSingleton(SingletonMain, db)
    9. return nil
    10. }

    获取DB对象

    通过获取DB对象,即使XORM文档中的*xorm.EngineGroup对象,可参考文档说明,组装自己的SQL实现。

    1. ## 第一个参数为依赖注册别名,可选参数,未设置会选择默认的db
    2. engineGroup := db.GetDb(db.SingletonMain)

    Git仓库

    https://github.com/go-xorm/xorm

    XORM文档

    http://gobook.io/read/github.com/go-xorm/manual-zh-CN/

    特性

    • 支持Struct和数据库表之间的灵活映射,并支持自动同步表结构
    • 事务支持
    • 支持原始SQL语句和ORM操作的混合执行
    • 使用连写来简化调用
    • 支持使用Id, In, Where, Limit, Join, Having, Table, Sql, Cols等函数和结构体等方式作为条件
    • 支持级联加载Struct
    • 支持LRU缓存(支持memory, memcache, leveldb, redis缓存Store) 和 Redis缓存
    • 支持反转,即根据数据库自动生成xorm的结构体
    • 支持事件
    • 支持created, updated, deleted和version记录版本(即乐观锁)

    驱动支持

    需要在main入口引入驱动包

    • Mysql: github.com/go-sql-driver/mysql
    • MyMysql: github.com/ziutek/mymysql/godrv
    • Postgres: github.com/lib/pq
    • Tidb: github.com/pingcap/tidb
    • SQLite: github.com/mattn/go-sqlite3
    • MsSql: github.com/denisenkom/go-mssqldb
    • MsSql: github.com/lunny/godbc
    • Oracle: github.com/mattn/go-oci8 (试验性支持)
    • ql: github.com/cznic/ql (试验性支持)