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