成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 使用 xorm 操作 MySQL

數據庫 MySQL
本文介紹了 golang orm 庫 xorm 的使用和項目結構。

本文介紹了 golang orm 庫 xorm 的使用和項目結構。

xorm 

  1. 官方介紹:xorm 是一個簡單而強大的 Go 語言 ORM 庫。  
  2. 通過它可以使數據庫操作非常簡便。xorm 的目標并不是讓你完全不去學習 SQL,  
  3. 我們認為 SQL 并不會為 ORM 所替代,但是 ORM 將可以解決絕大部分的簡單 SQL 需求。  
  4. xorm 支持兩種風格的混用。 

xorm 還提供了工具,通過 reverse 命令根據數據庫的表結構生成對應的 struct,省去了人工組織代碼的工作,十分方便。官方地址:https://xorm.io/

安裝

瀏覽 xorm 的 github 地址,我們要下載 2 個包,https://github.com/go-xorm

1、xorm 驅動包,我們使用 xorm 的核心包

2、cmd 工具包,用于使用 reverse 命令生成數據表對應的 struct

通過 go get 命令分別下載 2 個包go get github.com/go-xorm/xormgo get github.com/go-xorm/cmd/xorm下載完成后 github.com 文件夾下會出現 go-xorm 包

生成數據結構 struct

本地數據庫 test 有 2 張數據表,doctor_tb 和 user_tb, 數據結構如下:

我們現在就來生成這 2 張數據表的結構模型。

1、在任意項目下新建一個文件夾 xorm_models,文件名沒有規定,為了存放生成的代碼文件。

2、拷貝 cmd 工具包中的摸板目錄到 xorm_models 下,在文件目錄github.com\go-xorm\cmd\xorm\templates\goxorm下

config 是生成的配置信息,struct.go.tpl 是數據摸板,允許自定義,可以根據自己的項目需求,修改摸板。一般不需要修改。

3、打開 cmd 命令行窗口,進入 xorm_models 目錄下,執行 reverse 命令:xorm reverse [數據庫類型] [數據庫連接串] [模板目錄]

  1. xorm reverse mysql root:112233@tcp(127.0.0.1:3305)/test?charset=utf8 templates/goxorm 

4、數據結構代碼會自動生成在 xorm_models/models 目錄下。

我們能看到生成了和表名同名的 2 個數據結構文件 doctor_tb.go 和 user_tb.go 

  1. package models  
  2. import (  
  3.     "time"  
  4.  
  5. type DoctorTb struct {  
  6.     Id      int       `xorm:"not null pk autoincr INT(11)"`  
  7.     Name    string    `xorm:"default '' comment('姓名') VARCHAR(50)"`  
  8.     Age     int       `xorm:"default 0 comment('年齡') INT(11)"`  
  9.     Sex     int       `xorm:"default 0 comment('性別') INT(11)"`  
  10.     Addtime time.Time `xorm:"DATETIME"`  

使用 xorm

xorm 支持鏈式的寫法engine.Where("age > ?", 40).Or("name like ?", "林%").OrderBy("Id desc").Find(&docList2)也支持直接執行 sql 語句engine.SQL("select * from doctor_tb where age > ?", 40).Find(&docList4)

附上增刪改查事務的 demo 例子,代碼里都有注釋,很容易看懂。xorm 的封裝比較友好,只要熟悉 sql 語句,即便不看文檔,也能順利的使用各種關鍵字。 

  1. package main  
  2. import (  
  3.     "fmt"  
  4.     _ "github.com/go-sql-driver/mysql"  
  5.     "github.com/go-xorm/xorm"  
  6.     "goShare/xorm_models/models"  
  7.     "time"  
  8.  
  9. func main() {  
  10.     var engine *xorm.Engine  
  11.     //連接數據庫  
  12.     engine, err :xorm.NewEngine("mysql", "root:112233@tcp(127.0.0.1:3305)/test?charset=utf8")  
  13.     if err != nil {  
  14.         fmt.Println(err)  
  15.         return  
  16.     }  
  17.     //連接測試  
  18.     if err :engine.Ping(); err != nil {  
  19.         fmt.Println(err)  
  20.         return  
  21.     }  
  22.     defer engine.Close() //延遲關閉數據庫  
  23.     fmt.Println("數據庫鏈接成功")  
  24.     //查詢單條數據  
  25.     var doc models.DoctorTb  
  26.     b, _ :engine.Where("name = ?", "鐘南山").Get(&doc)  
  27.     if b {  
  28.         fmt.Println(doc)  
  29.     } else {  
  30.         fmt.Println("數據不存在")  
  31.     }  
  32.     //查詢單條數據方式 2 會根據結構體的  
  33.     doc2 :models.DoctorTb{Name: "鐘南山"}  
  34.     b, _ = engine.Get(&doc2)  
  35.     fmt.Println(doc2)  
  36.     //新增數據  
  37.     doc3 :models.DoctorTb{0, "王醫生", 48, 1, time.Now()}  
  38.     i3, _ :engine.InsertOne(doc3)  
  39.     fmt.Println("新增結果:", i3)  
  40.     //查詢列表  
  41.     docList :make([]models.DoctorTb, 0)  
  42.     engine.Where("age > ? or name like ?", 40, "林%").Find(&docList)  
  43.     fmt.Println("docList:", docList)  
  44.     //查詢列表方式 2  
  45.     docList2 :make([]models.DoctorTb, 0)  
  46.     engine.Where("age > ?", 40).Or("name like ?", "林%").OrderBy("Id desc").Find(&docList2)  
  47.     fmt.Println("docList2:", docList2)  
  48.     //查詢分頁  
  49.     docList3 :make([]models.DoctorTb, 0)  
  50.     page :0     //頁索引  
  51.     pageSize :2 //每頁數據  
  52.     limit :pageSize  
  53.     start :page * pageSize  
  54.     totalCount, err :engine.Where("age > ? or name like ?", 40, "林%").Limit(limit, start).FindAndCount(&docList3)  
  55.     fmt.Println("總記錄數:", totalCount, "docList3:", docList3)  
  56.     //直接用語句查詢  
  57.     docList4 :make([]models.DoctorTb, 0)  
  58.     engine.SQL("select * from doctor_tb where age > ?", 40).Find(&docList4)  
  59.     fmt.Println("docList4:", docList4)  
  60.     //刪除  
  61.     docDel :models.DoctorTb{Name: "王醫生"}  
  62.     iDel, _ :engine.Delete(&docDel)  
  63.     fmt.Println("刪除結果:", iDel)  
  64.     //刪除方式 2  
  65.     engine.Exec("delete from doctor_tb where Id = ?", 3)  
  66.     //更新數據  
  67.     doc5 :models.DoctorTb{Name: "鐘醫生"}  
  68.     //更新數據 ID 為 2 的記錄名字更改為“鐘醫生”  
  69.     iUpdate, _ :engine.Id(2).Update(&doc5)  
  70.     fmt.Println("更新結果:", iUpdate)  
  71.     //指定表名查詢。Table()  
  72.     user :models.UserTb{Id: 2}  
  73.     b, _ = engine.Table("user_tb").Get(&user)  
  74.     fmt.Println(user)  
  75.     //事務  
  76.     session :engine.NewSession()  
  77.     defer session.Close()  
  78.     err = session.Begin()  
  79.     _, err = session.Exec("delete from doctor_tb where Id = ?", 6)  
  80.     if err != nil {  
  81.         session.Rollback()  
  82.         return  
  83.     }  
  84.     _, err = session.Exec("delete from user_tb where Id = ?", 10)  
  85.     if err != nil {  
  86.         session.Rollback()  
  87.         return  
  88.     } 
  89.     err = session.Commit()  
  90.     if err != nil {  
  91.         return  
  92.     }  
  93.     fmt.Println("事務執行成功")  

總結

歸納下使用流程:

1、下載 xorm 包和 cmd 工具包

2、復制 cmd 工具包里的模板代碼文件夾至生成目錄底下

3、使用 reverse 生成數據結構代碼,省去苦力活

4、實例引擎xorm.NewEngine()

5、痛快的調用

demo 里提供了我們開發業務上常用的增,刪,改,查單條數據,查列表,查分頁,事務等內容。如果文章對你有用,請點個贊。 

 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2023-07-03 00:44:26

Go語言MySQL

2020-07-02 16:20:36

MySQLCURD數據庫

2024-12-30 00:38:23

Go語言微服務

2024-01-07 19:54:51

2021-01-27 10:01:46

MySQL數據庫SQLX

2021-01-23 12:47:19

MySQL數據庫Go語言

2021-10-19 10:26:31

MySQL.MySQLJSON

2024-03-25 07:22:50

GolangMySQL數據庫

2009-06-04 15:59:53

Netbeans操作MMySQL數據庫

2022-05-16 10:58:12

Go 項目Makefilemake

2023-11-07 08:04:19

Go并發程序原子操作

2023-01-31 08:48:49

Go語言文件

2023-11-01 13:40:25

GolangGo

2024-02-26 00:02:00

開發Go

2021-02-03 15:10:38

GoKubernetesLinux

2015-08-14 09:21:09

gdb工具調試 Go

2021-12-15 10:54:12

Gogofmt命令Go源代碼

2023-09-12 11:10:00

代碼優化Go

2025-05-19 08:20:00

GoLicense后端

2011-07-22 13:24:55

MySQL Proxy讀寫離別
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧洲尺码日本国产精品 | 四虎影院在线免费观看 | 九九久久这里只有精品 | 亚洲欧美激情精品一区二区 | 91精品一区 | 欧美在线视频a | 色在线看| 亚洲欧洲一区 | 99国内精品久久久久久久 | 精品国产成人 | 精品1区2区 | 91福利电影在线观看 | 久久国产精品免费一区二区三区 | 欧美v在线观看 | 欧美黄在线观看 | 国产一区二区三区四区在线观看 | 中国一级特黄真人毛片免费观看 | 精品免费av | 99久久久久久99国产精品免 | 精品综合久久 | av网址在线播放 | 中文字幕在线观看www | 日韩在线播放网址 | 激情欧美一区二区三区 | 日韩精品一区二区三区高清免费 | 一区二区三区四区毛片 | 亚洲国产一区二区视频 | 99热国产精品 | 久久精品小视频 | 久久国产精品网站 | 国产精品一区二区三区在线 | 久久久入口| 黄免费观看 | 国产成人精品一区二 | 日韩欧美精品在线 | 天天色天天色 | 久久中文网 | 二区av | 亚洲欧美一区二区三区国产精品 | 久草视频在线播放 | 7799精品视频天天看 |