# 嵌套事務模型使用
上一章節我們介紹了,簡單事務模型的使用,大多數場景使用簡單事務模型即可滿足我們的需求,但實際業務開發過程中我們會發現依然還有一些特殊場景,我們需要使用嵌套事務來進行事務處理。本xorm版本也提供了嵌套事務的支持。當使用嵌套事務模型進行事務處理時,同樣也需要創建Session對象,與使用簡單事務模型進行事務處理不同在于,使用`session.Begin()`創建簡單事務時,直接在同一個session下操作,而使用嵌套事務模型進行事務處理時候,使用`session.BeginTrans()`創建嵌套事務時,將返回Transaction實例,后續操作則在同一個Transaction實例下操作。在進行具體數據庫操作時候,則使用`tx.Session()`API可以獲得當前事務所持有的session會話,從而進行Get(),Find(),Execute()等具體數據庫操作。
示例代碼如下:
~~~
session := engine.NewSession()
defer session.Close()
// add BeginTrans() before any action
tx, err := session.BeginTrans()
if err != nil {
return
}
user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()}
_, err = tx.Session().Insert(&user1)
if err != nil {
tx.Rollback()
return
}
user2 := Userinfo{Username: "yyy"}
_, err = tx.Session().Where("id = ?", 2).Update(&user2)
if err != nil {
tx.RollbackTrans()
return
}
_, err = tx.Session().Exec("delete from userinfo where username = ?", user2.Username)
if err != nil {
tx.RollbackTrans()
return
}
_, err = tx.Session().SqlMapClient("delete.userinfo", user2.Username).Execute()
if err != nil {
tx.RollbackTrans()
return
}
// add CommitTrans() after all actions
err = tx.CommitTrans()
if err != nil {
...
return
}
~~~
- 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 工具
- 常見問題
- 感謝支持