单个ORM引擎,也称为Engine。一个APP可以同时存在多个Engine引擎,一个Engine一般只对应一个数据库。Engine通过调用xorm.NewEngine生成,如:
xorm.NewEngine
import ( _ "github.com/go-sql-driver/mysql" "github.com/go-xorm/xorm" ) var engine *xorm.Engine func main() { var err error engine, err = xorm.NewEngine("mysql", "root:123@/test?charset=utf8") }
or
import ( _ "github.com/mattn/go-sqlite3" "github.com/go-xorm/xorm" ) var engine *xorm.Engine func main() { var err error engine, err = xorm.NewEngine("sqlite3", "./test.db") }
一般情况下如果只操作一个数据库,只需要创建一个engine即可。engine是GoRoutine安全的。
engine
创建完成engine之后,并没有立即连接数据库,此时可以通过engine.Ping()来进行数据库的连接测试是否可以连接到数据库。另外对于某些数据库有连接超时设置的,可以通过起一个定期Ping的Go程来保持连接鲜活。
engine.Ping()
对于有大量数据并且需要分区的应用,也可以根据规则来创建多个Engine,比如:
var err error for i:=0;i<5;i++ { engines[i], err = xorm.NewEngine("sqlite3", fmt.Sprintf("./test%d.db", i)) }
engine可以通过engine.Close来手动关闭,但是一般情况下可以不用关闭,在程序退出时会自动关闭。
NewEngine传入的参数和sql.Open传入的参数完全相同,因此,在使用某个驱动前,请查看此驱动中关于传入参数的说明文档。以下为各个驱动的连接符对应的文档链接:
sql.Open
sqlite3
mysql dsn
mymysql
postgres
在engine创建完成后可以进行一些设置,如:
日志是一个接口,通过设置日志,可以显示SQL,警告以及错误等,默认的显示级别为INFO。
engine.ShowSQL(true)
engine.Logger().SetLevel(core.LOG_DEBUG)
如果希望将信息不仅打印到控制台,而是保存为文件,那么可以通过类似如下的代码实现,NewSimpleLogger(w io.Writer)接收一个io.Writer接口来将数据写入到对应的设施中。
NewSimpleLogger(w io.Writer)
f, err := os.Create("sql.log") if err != nil { println(err.Error()) return } engine.SetLogger(xorm.NewSimpleLogger(f))
当然,如果希望将日志记录到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内部支持连接池接口和对应的函数。
engine.SetMaxIdleConns()
engine.SetMaxOpenConns()
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8