# 常見問題
* 如何使用Like?
答:
~~~
engine.Where("column like ?", "%"+char+"%").Find
~~~
* 怎么同時使用xorm的tag和json的tag?
答:使用空格
~~~
type User struct {
Name string `json:"name" xorm:"name"`
}
~~~
* 我的struct里面包含bool類型,為什么它不能作為條件也沒法用Update更新?
答:默認bool類型因為無法判斷是否為空,所以不會自動作為條件也不會作為Update的內容。可以使用UseBool函數,也可以使用Cols函數
~~~
engine.Cols("bool_field").Update(&Struct{BoolField:true})
// UPDATE struct SET bool_field = true
~~~
* 我的struct里面包含float64和float32類型,為什么用他們作為查詢條件總是不正確?
答:默認float32和float64映射到數據庫中為float,real,double這幾種類型,這幾種數據庫類型數據庫的實現一般都是非精確的。因此作為相等條件查詢有可能不會返回正確的結果。如果一定要作為查詢條件,請將數據庫中的類型定義為Numeric或者Decimal。
~~~
type account struct {
money float64 `xorm:"Numeric"`
}
~~~
* 為什么Update時Sqlite3返回的affected和其它數據庫不一樣?
答:Sqlite3默認Update時返回的是update的查詢條件的記錄數條數,不管記錄是否真的有更新。而Mysql和Postgres默認情況下都是只返回記錄中有字段改變的記錄數。
* xorm有幾種命名映射規則?
答:目前支持SnakeMapper, SameMapper和GonicMapper三種。SnakeMapper支持結構體和成員以駝峰式命名而數據庫表和字段以下劃線連接命名;SameMapper支持結構體和數據庫的命名保持一致的映射。GonicMapper在SnakeMapper的基礎上對一些特定名詞,比如ID的映射會映射為id,而不是像SnakeMapper那樣為i_d。
* xorm支持復合主鍵嗎?
答:支持。在定義時,如果有多個字段標記了pk,則這些字段自動成為復合主鍵,順序為在struct中出現的順序。在使用Id方法時,可以用Id(xorm.PK{1, 2})的方式來用。
* xorm如何使用Join?
答:一般我們配合Join()和extends標記來進行,比如我們要對兩個表進行Join操作,我們可以這樣:
~~~
type Userinfo struct {
Id int64
Name string
DetailId int64
}
type Userdetail struct {
Id int64
Gender int
}
type User struct {
Userinfo `xorm:"extends"`
Userdetail `xorm:"extends"`
}
var users = make([]User, 0)
err := engine.Table(&Userinfo{}).Join("LEFT", "userdetail", "userinfo.detail_id = userdetail.id").Find(&users)
~~~
請注意這里的Userinfo在User中的位置必須在Userdetail的前面,因為他在join語句中的順序在userdetail前面。如果順序不對,那么對于同名的列,有可能會賦值出錯。
當然,如果Join語句比較復雜,我們也可以直接用Sql函數
~~~
err := engine.Sql("select * from userinfo, userdetail where userinfo.detail_id = userdetail.id").Find(&users)
~~~
如果有自動增長的字段,Insert如何寫? 答:Insert時,如果需要自增字段填充為自動增長的數值,請保持自增字段為0;如果自增字段為非0,自增字段將會被作為普通字段插入。
* 如何設置數據庫時區?
答:
~~~
location, err = time.LoadLocation("Asia/Shanghai")
engine.TZLocation = location
~~~
- 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 工具
- 常見問題
- 感謝支持