github.com/go-xorm/xorm xorm庫mysql
http://www.xorm.io/docs/ 手冊git
xorm是一個簡單而強大的Go語言ORM庫. 經過它可使數據庫操做很是簡便。xorm的目標並非讓你徹底不去學習SQL,咱們認爲SQL並不會爲ORM所替代,可是ORM將能夠解決絕大部分的簡單SQL需求。github
在xorm裏面,能夠同時存在多個Orm引擎,一個Orm引擎稱爲Engine,一個Engine通常只對應一個數據庫。Engine經過調用xorm.NewEngine
生成,如:sql
var engine *xorm.Engine
在使用前,記得導入須要的包數據庫
import ( _ "github.com/go-sql-driver/mysql" "github.com/go-xorm/xorm" )
建立完成engine以後,並無當即鏈接數據庫,此時能夠經過engine.Ping()來進行數據庫的鏈接測試是否能夠鏈接到數據庫。另外對於某些數據庫有鏈接超時設置的,能夠經過起一個按期Ping的Go程來保持鏈接鮮活。函數
engine能夠經過engine.Close來手動關閉,可是通常狀況下能夠不用關閉,在程序退出時會自動關閉。學習
若是是go-sql-driver,執行exec()也會自動關閉,可是執行Query()則須要關閉。測試
xorm的日誌比使用go-sql-driver要好用,整體來講xorm是現有的orm中值得一用的一個。spa
日誌是一個接口,經過設置日誌,能夠顯示SQL,警告以及錯誤等,默認的顯示級別爲INFO。調試
engine.ShowSQL(true)
,則會在控制檯打印出生成的SQL語句;engine.Logger().SetLevel(core.LOG_DEBUG)
,則會在控制檯打印調試及以上的信息;若是但願將信息不只打印到控制檯,而是保存爲文件,那麼能夠經過相似以下的代碼實現,NewSimpleLogger(w io.Writer)
接收一個io.Writer接口來將數據寫入到對應的設施中。
固然,若是但願將日誌記錄到syslog中,也能夠以下:
logWriter, err := syslog.New(syslog.LOG_DEBUG, "rest-xorm-example") if err != nil { log.Fatalf("Fail to create xorm system logger: %v\n", err) } logger := xorm.NewSimpleLogger(logWriter) logger.ShowSQL(true) engine.SetLogger(logger)
engine內部支持鏈接池接口和對應的函數。
ps:go-sql-driver 內部也支持鏈接池。
engine.SetMaxIdleConns()
來實現。engine.SetMaxOpenConns()
來實現。最後,舉一個xorm的使用例子
var users []User err := engine.Where("name = ?", name).And("age > 10").Limit(10, 0).Find(&users) // SELECT * FROM user WHERE name = ? AND age > 10 limit 0 offset 10 type Detail struct { Id int64 UserId int64 `xorm:"index"` } type UserDetail struct { User `xorm:"extends"` Detail `xorm:"extends"` } var users []UserDetail err := engine.Table("user").Select("user.*, detail.*") Join("INNER", "detail", "detail.user_id = user.id"). Where("user.name = ?", name).Limit(10, 0). Find(&users) // SELECT user.*, detail.* FROM user INNER JOIN detail WHERE user.name = ? limit 0 offset 10