golang xorm應用

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
相關文章
相關標籤/搜索