xorm框架基础知识学习
生活随笔
收集整理的這篇文章主要介紹了
xorm框架基础知识学习
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
網(wǎng)址
xorm github地址:https://github.com/go-xorm/xorm
xorm中文學習文檔:https://xorm.io/zh/
xorm
xorm是一個簡單而強大的go語言orm庫,通過它可以使數(shù)據(jù)庫操作變得非常流暢。
xorm特點
- 支持Struct結構體和數(shù)據(jù)庫表之間的靈活映射,并支持自動同步
- 事務支持
- 同時支持原始sql語句和orm操作的混合執(zhí)行
- 使用連寫來簡化調用
- 支持使用ID, In, Where, Limit, Join, Having, Table, SQL, Cols等函數(shù)和結構體等方式作為條件
- 支持級聯(lián)加載Struct
- Schema支持(僅Postgres)
- 支持緩存
- 通過 xorm.io/reverse 支持根據(jù)數(shù)據(jù)庫自動生成 xorm 結構體
- 支持記錄版本(即樂觀鎖)
- 通過 xorm.io/builder 內(nèi)置 SQL Builder 支持
- 上下文緩存支持
- 支持日志上下文
安裝
go get xorm.io/xorm
結構體同步數(shù)據(jù)庫表
- 第一步創(chuàng)建引擎,driverName, dataSourceName, 和database/sql接口相同
- 定義一個和表同步的結構體,并且自動同步結構體到數(shù)據(jù)庫中
點擊運行,可以看到數(shù)據(jù)庫xorm_test多了一個user表,表字段與結構體的屬性一致
insert語句
insert可以插入一條或多條數(shù)據(jù)
插入一條數(shù)據(jù)
// 插入一條數(shù)據(jù) user := User{Name: "zhangsan", Age: 18, Passwd: "123456"} n, _ := engine.Insert(&user) if n > 0 {fmt.Println("插入成功") }插入多條數(shù)據(jù)
// 插入多條數(shù)據(jù) user1 := User{Name: "zhangsan1", Age: 3, Passwd: "123456"} user2 := User{Name: "zhangsan2", Age: 3, Passwd: "123456"} n, _ := engine.Insert(&user1, &user2) if n > 0 {fmt.Println("插入成功") }插入切片類型的數(shù)據(jù)
// 插入切片類型的數(shù)據(jù) var users []User users = append(users, User{Name: "lisi1", Age: 1, Passwd: "123456"}) users = append(users, User{Name: "lisi2", Age: 1, Passwd: "123456"}) users = append(users, User{Name: "lisi3", Age: 1, Passwd: "123456"}) n, _ := engine.Insert(&users) if n > 0 {fmt.Println("插入成功") }插入map類型的數(shù)據(jù)
// 插入map類型的數(shù)據(jù) n, err := engine.Table(&User{}).Insert([]map[string]interface{}{{"name": "wangwu1","age": 18,"passwd": "123456",},{"name": "wangwu2","age": 3,"passwd": "123456",}, }) if n > 0 {fmt.Println("插入成功") } // INSERT INTO user (name, age, password) values (?,?,?),(?,?,?)插入map類型的數(shù)據(jù)時必須指明要插入的表
更新和刪除
- Update更新數(shù)據(jù),默認只更新非空和非0的字段
- Delete刪除記錄,需要注意,刪除必須至少有一個條件,否則會報錯
- Exec執(zhí)行一個sql語句
update更新
user := User{Name: "lisi", Age: 3} n, _ := engine.ID(1).Update(&user) fmt.Println(n)engine.Exec("update user set age=18 where id =1")delete刪除
user := User{Name: "lisi1"} n, _ = engine.ID(4).Delete(&user) fmt.Println(n)Exec執(zhí)行sql語句
engine.Exec("update user set age = 18 where id = 1") // 采用占位符 engine.Exec("update user set age = ? where id = ?",18,2)查詢語句
- Query 最原始的也支持SQL語句查詢,返回的結果類型為 []map[string][]byte。QueryString 返回 []map[string]string, QueryInterface 返回 []map[string]interface{}.
- Get 查詢單條記錄
- Find 查詢多條記錄,可以使用Join和extends來組合使用
- Count 獲取記錄條數(shù)
- Iterate 和 Rows 根據(jù)條件遍歷數(shù)據(jù)庫,可以有兩種方式: Iterate and Rows
query查詢
// query查詢 resultSlice1, _ := engine.Query("select * from user") fmt.Println(resultSlice1) resultSlice2, _ := engine.QueryString("select * from user") fmt.Println(resultSlice2) resultSlice3, _ := engine.QueryInterface("select * from user") fmt.Println(resultSlice3)get查詢
// 查詢用戶 user := User{} engine.Get(&user) fmt.Println(user)// 指定條件查詢用戶 user = User{Name: "lisi"} engine.Where("name=?", user.Name).Asc("id").Get(&user) fmt.Println(user)// 獲取指定字段的值 var name string engine.Table(&user).Where("id = 1").Cols("age").Get(&name) fmt.Println(name)find查詢
// find查詢多條語句 var users []User engine.Where("passwd = 123456").And("age = 3").Limit(10, 0).Find(&users) fmt.Println(users)count查詢數(shù)目
// 查詢數(shù)目 user = User{Passwd: "123456"} counts, _ := engine.Count(&user) fmt.Println(counts)Iterate和Row根據(jù)條件遍歷
// Iterate和Row根據(jù)條件遍歷 engine.Iterate(&User{Passwd: "123456"}, func(idx int, bean interface{}) error {user, ok := bean.(*User)fmt.Println(user, ok)return nil }) rows, _ := engine.Rows(&User{Passwd: "123456"}) defer rows.Close() userptr := new(User) for rows.Next() {rows.Scan(userptr)fmt.Println(userptr) }事務
session := engine.NewSession() defer session.Close()session.Begin() defer func() {err := recover()if err != nil {fmt.Println(err)session.Rollback()} else {session.Commit()} }()user := User1{Id: 11, Name: "zhangsan", Age: 18, Passwd: "123456"} if _, err = session.Insert(&user); err != nil {panic(err) } user2 := User1{Name: "wangwu", Age: 3} if _, err = session.Where("id=5").Update(&user2); err != nil {panic(err) }if _, err = session.Exec("delete from user1 where name='zhangsan'"); err != nil {panic(err) }總結
以上是生活随笔為你收集整理的xorm框架基础知识学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xorm代码
- 下一篇: 分布式的版本控制工具(Git)