Revel の MySQL プラグインを書いてみる
Revel から MyMySQL を使って MySQL にアクセスすることができるようにしたかったので書いた.
とりあえず下記のようなコードをどこかに置いておけばいいっぽい. プラグインって構成上どこにおけばいいんだろう.
https://gist.github.com/nise-nabe/5234154
import ( "database/sql" "github.com/robfig/revel" _ "github.com/ziutek/mymysql/godrv" ) var ( db *sql.DB ) type MySQLPlugin struct { revel.EmptyPlugin } func (p MySQLPlugin) OnAppStart() { host, _ := revel.Config.String("db.host") port, _ := revel.Config.String("db.port") dbname, _ := revel.Config.String("db.name") user, _ := revel.Config.String("db.user") pass, _ := revel.Config.String("db.pass") var err error db, err = sql.Open("mymysql", "tcp:"+host+":"+port+"*"+dbname+"/"+user+"/"+pass) if err != nil { panic(err) } } func (p MySQLPlugin) BeforeRequest(c *revel.Controller) { txn, err := db.Begin() if err != nil { panic(err) } c.Txn = txn } func (p MySQLPlugin) AfterRequest(c *revel.Controller) { c.Txn.Commit() c.Txn = nil } func (p MySQLPlugin) OnException(c *revel.Controller, err interface{}) { if c.Txn != nil { c.Txn.Rollback() } } func init() { revel.RegisterPlugin(MySQLPlugin{}) }
conf/app.conf に下記のような記述を追加.
db.host = host db.port = port db.name = databasename db.user = username db.pass = password
あとは Go 言語の database/sql パッケージの使い方でアクセスすればいい.