简介

目前数据库使用开源的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 (试验性支持)