自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go 使用 xorm 操作 MySQL

數(shù)據(jù)庫 MySQL
本文介紹了 golang orm 庫 xorm 的使用和項目結(jié)構(gòu)。

本文介紹了 golang orm 庫 xorm 的使用和項目結(jié)構(gòu)。

xorm 

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

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

安裝

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

1、xorm 驅(qū)動包,我們使用 xorm 的核心包

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

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

生成數(shù)據(jù)結(jié)構(gòu) struct

本地數(shù)據(jù)庫 test 有 2 張數(shù)據(jù)表,doctor_tb 和 user_tb, 數(shù)據(jù)結(jié)構(gòu)如下:

我們現(xiàn)在就來生成這 2 張數(shù)據(jù)表的結(jié)構(gòu)模型。

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

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

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

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

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

4、數(shù)據(jù)結(jié)構(gòu)代碼會自動生成在 xorm_models/models 目錄下。

我們能看到生成了和表名同名的 2 個數(shù)據(jù)結(jié)構(gòu)文件 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)也支持直接執(zhí)行 sql 語句engine.SQL("select * from doctor_tb where age > ?", 40).Find(&docList4)

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

  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.     //連接數(shù)據(jù)庫  
  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() //延遲關(guān)閉數(shù)據(jù)庫  
  23.     fmt.Println("數(shù)據(jù)庫鏈接成功")  
  24.     //查詢單條數(shù)據(jù)  
  25.     var doc models.DoctorTb  
  26.     b, _ :engine.Where("name = ?", "鐘南山").Get(&doc)  
  27.     if b {  
  28.         fmt.Println(doc)  
  29.     } else {  
  30.         fmt.Println("數(shù)據(jù)不存在")  
  31.     }  
  32.     //查詢單條數(shù)據(jù)方式 2 會根據(jù)結(jié)構(gòu)體的  
  33.     doc2 :models.DoctorTb{Name: "鐘南山"}  
  34.     b, _ = engine.Get(&doc2)  
  35.     fmt.Println(doc2)  
  36.     //新增數(shù)據(jù)  
  37.     doc3 :models.DoctorTb{0, "王醫(yī)生", 48, 1, time.Now()}  
  38.     i3, _ :engine.InsertOne(doc3)  
  39.     fmt.Println("新增結(jié)果:", 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 //每頁數(shù)據(jù)  
  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("總記錄數(shù):", 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: "王醫(yī)生"}  
  62.     iDel, _ :engine.Delete(&docDel)  
  63.     fmt.Println("刪除結(jié)果:", iDel)  
  64.     //刪除方式 2  
  65.     engine.Exec("delete from doctor_tb where Id = ?", 3)  
  66.     //更新數(shù)據(jù)  
  67.     doc5 :models.DoctorTb{Name: "鐘醫(yī)生"}  
  68.     //更新數(shù)據(jù) ID 為 2 的記錄名字更改為“鐘醫(yī)生”  
  69.     iUpdate, _ :engine.Id(2).Update(&doc5)  
  70.     fmt.Println("更新結(jié)果:", 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("事務執(zhí)行成功")  

總結(jié)

歸納下使用流程:

1、下載 xorm 包和 cmd 工具包

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

3、使用 reverse 生成數(shù)據(jù)結(jié)構(gòu)代碼,省去苦力活

4、實例引擎xorm.NewEngine()

5、痛快的調(diào)用

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

 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關(guān)推薦

2023-07-03 00:44:26

Go語言MySQL

2020-07-02 16:20:36

MySQLCURD數(shù)據(jù)庫

2024-12-30 00:38:23

Go語言微服務

2021-01-23 12:47:19

MySQL數(shù)據(jù)庫Go語言

2024-01-07 19:54:51

2021-01-27 10:01:46

MySQL數(shù)據(jù)庫SQLX

2021-10-19 10:26:31

MySQL.MySQLJSON

2024-03-25 07:22:50

GolangMySQL數(shù)據(jù)庫

2009-06-04 15:59:53

Netbeans操作MMySQL數(shù)據(jù)庫

2022-05-16 10:58:12

Go 項目Makefilemake

2023-11-07 08:04:19

Go并發(fā)程序原子操作

2023-01-31 08:48:49

Go語言文件

2015-08-14 09:21:09

gdb工具調(diào)試 Go

2024-02-26 00:02:00

開發(fā)Go

2023-11-01 13:40:25

GolangGo

2021-02-03 15:10:38

GoKubernetesLinux

2023-09-12 11:10:00

代碼優(yōu)化Go

2021-12-15 10:54:12

Gogofmt命令Go源代碼

2010-05-28 14:42:00

MySQL使用備忘

2011-07-22 13:24:55

MySQL Proxy讀寫離別
點贊
收藏

51CTO技術(shù)棧公眾號