### 創建Orm引擎
在xorm里面,可以同時存在多個Orm引擎,一個Orm引擎稱為Engine,一個Engine一般只對應一個數據庫。Engine通過調用`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`是GoRutine安全的。
創建完成`engine`之后,并沒有立即連接數據庫,此時可以通過`engine.Ping()`來進行數據庫的連接測試是否可以連接到數據庫。另外對于某些數據庫有連接超時設置的,可以通過起一個定期Ping的Go程來保持連接鮮活。
對于有大量數據并且需要分區的應用,也可以根據規則來創建多個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`傳入的參數完全相同,因此,在使用某個驅動前,請查看此驅動中關于傳入參數的說明文檔。以下為各個驅動的連接符對應的文檔鏈接:
-
[sqlite3](http://godoc.org/github.com/mattn/go-sqlite3#SQLiteDriver.Open)
-
[mysql dsn](https://github.com/go-sql-driver/mysql#dsn-data-source-name)
-
[mymysql](http://godoc.org/github.com/ziutek/mymysql/godrv#Driver.Open)
-
[postgres](http://godoc.org/github.com/lib/pq)
在engine創建完成后可以進行一些設置,如:
1.調試,警告以及錯誤等顯示設置,默認如下均為`false`
- `engine.ShowSQL = true`,則會在控制臺打印出生成的SQL語句;
- `engine.ShowDebug = true`,則會在控制臺打印調試信息;
- `engine.ShowError = true`,則會在控制臺打印錯誤信息;
- `engine.ShowWarn = true`,則會在控制臺打印警告信息;
2.如果希望將信息不僅打印到控制臺,而是保存為文件,那么可以通過類似如下的代碼實現,`NewSimpleLogger(w io.Writer)`接收一個io.Writer接口來將數據寫入到對應的設施中。
~~~
f, err := os.Create("sql.log")
if err != nil {
println(err.Error())
return
}
defer f.Close()
engine.Logger = xorm.NewSimpleLogger(f)
~~~
3.engine內部支持連接池接口和對應的函數。
- 如果需要設置連接池的空閑數大小,可以使用`engine.SetMaxIdleConns()`來實現。
- 如果需要設置最大打開連接數,則可以使用`engine.SetMaxOpenConns()`來實現。