# 創建Orm引擎
在xorm里面,可以同時存在多個Orm引擎,一個Orm引擎稱為Engine,一個Engine一般只對應一個數據庫。Engine通過調用xorm.NewEngine生成,如:
~~~
import (
_ "github.com/go-sql-driver/mysql"
"github.com/xormplus/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/xormplus/xorm"
)
var engine *xorm.Engine
func main() {
var err error
engine, err = xorm.NewEngine("sqlite3", "./test.db")
}
~~~
您也可以針對特定數據庫及數據庫驅動使用類似下面的快捷方式創建引擎
~~~
engine, err = xorm.NewPostgreSQL(dataSourceName)
engine, err = xorm.NewSqlite3(dataSourceName)
~~~
一般情況下如果只操作一個數據庫,只需要創建一個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創建完成后可以進行一些設置,如:
## 日志
日志是一個接口,通過設置日志,可以顯示SQL,警告以及錯誤等,默認的顯示級別為INFO。
* engine.ShowSQL(true),則會在控制臺打印出生成的SQL語句;
* engine.Logger().SetLevel(core.LOG_DEBUG),則會在控制臺打印調試及以上的信息;
如果希望將信息不僅打印到控制臺,而是保存為文件,那么可以通過類似如下的代碼實現,NewSimpleLogger(w io.Writer)接收一個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()來實現。
- xorm
- 創建Orm引擎
- 定義表結構體
- 名稱映射規則
- 前綴映射,后綴映射和緩存映射
- 使用Table和Tag改變名稱映射
- Column屬性定義
- 表結構操作
- 獲取數據庫信息
- 表操作
- 創建索引和唯一索引
- 同步數據庫結構
- 導入導出SQL腳本
- SqlMap及SqlTemplate模板
- 初始化SqlMap配置文件及SqlTemplate模板
- SqlMap及SqlTemplate相關功能API
- SqlMap配置文件及SqlTemplate模板加密存儲及解析
- 手動管理SqlMap配置及SqlTemplate模板
- 插入數據
- ORM方式插入數據
- 執行SQL命令插入數據
- 創建時間Created
- 查詢和統計數據
- ORM方式查詢和統計數據
- 查詢條件方法
- 臨時開關方法
- Get方法
- Find方法
- Join的使用
- Iterate方法
- Count方法
- Rows方法
- Sum系列方法
- Exist方法
- 子查詢
- 執行SQL查詢
- 執行SQL查詢的11種常用方式
- 查詢返回json或xml字符串
- 鏈式查詢據操返回某條記錄的某個字段的值
- SqlTemplateClient執行過程
- 關于數據庫分頁查詢
- 更新數據
- ORM方式更新數據
- Update方法
- 樂觀鎖Version
- 更新時間Updated
- 執行SQL命令更新數據
- 刪除數據
- ORM方式刪除數據
- Delete方法
- 軟刪除Deleted
- 執行SQL命令刪除數據
- 事務處理
- 簡單事務模型
- 嵌套事務模型
- 八種事務類型及事務傳播機制
- 簡單事務相關API
- 嵌套事務相關API
- 嵌套事務示例代碼
- 主從數據庫(Master/Slave)讀寫分離
- 創建引擎組
- 負載策略
- 引擎組其他配置方法
- 數據庫讀寫分離
- 批量混合SQL操作
- SQL Builder
- 緩存
- 事件
- 數據導出
- Dump數據庫結構和數據
- 查詢結果集導出csv、tsv、xml、json、xlsx、yaml、html
- 多Sheet頁數據導出
- 日志
- 連接池
- xorm 工具
- 常見問題
- 感謝支持