日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xorm框架基础知识学习

發布時間:2024/3/24 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xorm框架基础知识学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

網址

xorm github地址:https://github.com/go-xorm/xorm

xorm中文學習文檔:https://xorm.io/zh/

xorm

xorm是一個簡單而強大的go語言orm庫,通過它可以使數據庫操作變得非常流暢。

xorm特點

  • 支持Struct結構體和數據庫表之間的靈活映射,并支持自動同步
  • 事務支持
  • 同時支持原始sql語句和orm操作的混合執行
  • 使用連寫來簡化調用
  • 支持使用ID, In, Where, Limit, Join, Having, Table, SQL, Cols等函數和結構體等方式作為條件
  • 支持級聯加載Struct
  • Schema支持(僅Postgres)
  • 支持緩存
  • 通過 xorm.io/reverse 支持根據數據庫自動生成 xorm 結構體
  • 支持記錄版本(即樂觀鎖)
  • 通過 xorm.io/builder 內置 SQL Builder 支持
  • 上下文緩存支持
  • 支持日志上下文

安裝

go get xorm.io/xorm

結構體同步數據庫表

  • 第一步創建引擎,driverName, dataSourceName, 和database/sql接口相同
  • 定義一個和表同步的結構體,并且自動同步結構體到數據庫中
package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""time""xorm.io/xorm" )func main() {// 數據庫連接信息var (// 用戶名userName string = "root"// 密碼password string = "123456"// 主機名ipAddress string = "127.0.0.1"// 端口號port int = 3306// 數據庫名dbName string = "xorm_test"// 字符編碼charset string = "utf8mb4")// 構建數據庫連接信息dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", userName, password, ipAddress, port, dbName, charset)engine, err := xorm.NewEngine("mysql", dataSourceName)if err != nil {fmt.Println("數據庫連接失敗")return}// 定義用戶結構體type User struct {Id int64Name stringAge intPasswd string `xorm:"varchar(200)"`Created time.Time `xorm:"created"`Updated time.Time `xorm:"updated"`}// 結構體同步到數據庫表err = engine.Sync(new(User))if err != nil {fmt.Println("數據庫表同步失敗")} }

點擊運行,可以看到數據庫xorm_test多了一個user表,表字段與結構體的屬性一致

insert語句

insert可以插入一條或多條數據

插入一條數據

// 插入一條數據 user := User{Name: "zhangsan", Age: 18, Passwd: "123456"} n, _ := engine.Insert(&user) if n > 0 {fmt.Println("插入成功") }

插入多條數據

// 插入多條數據 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("插入成功") }

插入切片類型的數據

// 插入切片類型的數據 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類型的數據

// 插入map類型的數據 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類型的數據時必須指明要插入的表

更新和刪除

  • Update更新數據,默認只更新非空和非0的字段
  • Delete刪除記錄,需要注意,刪除必須至少有一個條件,否則會報錯
  • Exec執行一個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執行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 獲取記錄條數
  • Iterate 和 Rows 根據條件遍歷數據庫,可以有兩種方式: 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查詢數目

// 查詢數目 user = User{Passwd: "123456"} counts, _ := engine.Count(&user) fmt.Println(counts)

Iterate和Row根據條件遍歷

// Iterate和Row根據條件遍歷 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框架基础知识学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。