简介
目前数据库使用开源的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去重复实例化资源。
注入示例:
## 代码路径pkg/db/provider.go
func (p *Provider) Register(args ...interface{}) error {
conf := args[0].(*config.Config)
db, err := NewEngineGroup(conf.Db)
if err != nil {
return err
}
container.App.SetSingleton(SingletonMain, db)
return nil
}
获取DB对象
通过获取DB对象,即使XORM文档中的*xorm.EngineGroup对象,可参考文档说明,组装自己的SQL实现。
## 第一个参数为依赖注册别名,可选参数,未设置会选择默认的db
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 (试验性支持)