db - liangmanlin/gootp GitHub Wiki
游戏通常是需要数据库存储数据的,加入你刚好需要,但是呢,你又不想自己实现一些细节,你可以使用该db库。
import (
"github.com/liangmanlin/gootp/db"
)
tabSlice := []*db.TabDef{
{Name: "account", DataStruct: &Account{}, Pkey: []string{"Account"}, Keys: []string{"AgentID"}},
}
dbConfig = db.Config{Host: "127.0.0.1", Port: 3306, User: "root", PWD: "123456"}
db.Start(dbConfig ,tabSlice, "dbName", "logDbName")
使用上面的代码启动db服务后,你就可以使用db库提供的函数了。
由于是使用反射获取的字段名,所以数据表的字段也是大写开头的。
你可能比较关注如下两个模块的api:
-
ModSelectRow(db *sql.DB, tab string, key ...interface{}) interface{}
直接从数据库select单条数据,你可能需要db参数,可以通过db.GameDB
全局变量获取。 -
ModSelectAll(db *sql.DB, tab string, key ...interface{}) []interface{}
select多条数据。 -
ModUpdate(db *sql.DB, tab string, data interface{}) (sql.Result, error)
更新单条数据。 -
ModInsert(db *sql.DB, tab string, data interface{}) (sql.Result, error)
插入一条数据。 -
ModDelete(db *sql.DB, tab string, data interface{}) (sql.Result, error)
根据完整的数据,删除一条数据。 -
ModDeletePKey(db *sql.DB, tab string, pkey ...interface{}) (sql.Result, error)
根据主键,删除数据。
与db_mod.go不同,这个模块是通过indexKey 取模,得到一个goroutine处理进程,这样可以规避多进程并发的问题。
SyncSelectRow(context *kernel.Context, tab string, indexKey int64, key ...interface{}) interface{}
查询单条记录。
-SyncSelect(context *kernel.Context, tab string, indexKey int64, key ...interface{}) []interface{}
查询多条记录。
-
SyncUpdate(tab string, indexKey int64, data interface{})
-
SyncInsert(tab string, indexKey int64, data interface{})
-
SyncDelete(tab string, indexKey int64, data interface{})
-
SyncDeletePKey(tab string, indexKey int64, pkey ...interface{})