golang xorm應用


github.com/go-xorm/xorm  xorm庫

http://www.xorm.io/docs/  手冊

xorm是一個簡單而強大的Go語言ORM庫. 通過它可以使數據庫操作非常簡便。xorm的目標並不是讓你完全不去學習SQL,我們認為SQL並不會為ORM所替代,但是ORM將可以解決絕大部分的簡單SQL需求。

在xorm里面,可以同時存在多個Orm引擎,一個Orm引擎稱為Engine,一個Engine一般只對應一個數據庫。Engine通過調用xorm.NewEngine生成,如:

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中值得一用的一個。

日志是一個接口,通過設置日志,可以顯示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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM