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
相关文章
相关标签/搜索