欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go?使用xorm操作mysql詳情

 更新時間:2022年01月26日 09:27:06   作者:運維派  
這篇文章主要介紹了Go?使用xorm操作mysql詳情,golang?orm?庫?xorm?的使用和項目結構。更多詳細neural,需要的小伙伴可以參考下面文章內容

xorm

官方介紹:xorm 是一個簡單而強大的 Go 語言 ORM 庫。

通過它可以使數(shù)據庫操作非常簡便。

xorm 的目標并不是讓你完全不去學習 SQL,我們認為 SQL 并不會為 ORM 所替代,但是 ORM 將可以解決絕大部分的簡單 SQL 需求。

xorm 支持兩種風格的混用。  

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

安裝

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

1、xorm 驅動包,我們使用 xorm 的核心包 2、cmd 工具包,用于使用 reverse 命令生成數(shù)據表對應的 struct

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

生成數(shù)據結構 struct

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

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

1、在任意項目下新建一個文件夾 xorm_models,文件名沒有規(guī)定,為了存放生成的代碼文件。
2、拷貝 cmd 工具包中的摸板目錄到 xorm_models 下,在文件目錄github.com\go-xorm\cmd\xorm\templates\goxorm

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

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

package models ?
import ( ?
? ? "time" ?
) ?
type DoctorTb struct { ?
? ? Id ? ? ?int ? ? ? `xorm:"not null pk autoincr INT(11)"` ?
? ? Name ? ?string ? ?`xorm:"default '' comment('姓名') VARCHAR(50)"` ?
? ? Age ? ? int ? ? ? `xorm:"default 0 comment('年齡') INT(11)"` ?
? ? Sex ? ? int ? ? ? `xorm:"default 0 comment('性別') INT(11)"` ?
? ? 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 語句,即便不看文檔,也能順利的使用各種關鍵字。

package main ?

import ( ?
? ? "fmt" ?
? ? _ "github.com/go-sql-driver/mysql" ?
? ? "github.com/go-xorm/xorm" ?
? ? "goShare/xorm_models/models" ?
? ? "time" ?
) ?

func main() { ?

? ? var engine *xorm.Engine ?
? ? //連接數(shù)據庫 ?
? ? engine, err := xorm.NewEngine("mysql", "root:112233@tcp(127.0.0.1:3305)/test?charset=utf8") ?
? ? if err != nil { ?
? ? ? ? fmt.Println(err) ?
? ? ? ? return ?
? ? } ?
? ? //連接測試 ?
? ? if err := engine.Ping(); err != nil { ?
? ? ? ? fmt.Println(err) ?
? ? ? ? return ?
? ? } ?
? ? defer engine.Close() //延遲關閉數(shù)據庫 ?
? ? fmt.Println("數(shù)據庫鏈接成功") ?

? ? //查詢單條數(shù)據 ?
? ? var doc models.DoctorTb ?
? ? b, _ := engine.Where("name = ?", "鐘南山").Get(&doc) ?
? ? if b { ?
? ? ? ? fmt.Println(doc) ?
? ? } else { ?
? ? ? ? fmt.Println("數(shù)據不存在") ?
? ? } ?

? ? //查詢單條數(shù)據方式 2 會根據結構體的 ?
? ? doc2 := models.DoctorTb{Name: "鐘南山"} ?
? ? b, _ = engine.Get(&doc2) ?
? ? fmt.Println(doc2) ?

? ? //新增數(shù)據 ?
? ? doc3 := models.DoctorTb{0, "王醫(yī)生", 48, 1, time.Now()} ?
? ? i3, _ := engine.InsertOne(doc3) ?
? ? fmt.Println("新增結果:", i3) ?

? ? //查詢列表 ?
? ? docList := make([]models.DoctorTb, 0) ?
? ? engine.Where("age > ? or name like ?", 40, "林%").Find(&docList) ?
? ? fmt.Println("docList:", docList) ?

? ? //查詢列表方式 2 ?
? ? docList2 := make([]models.DoctorTb, 0) ?
? ? engine.Where("age > ?", 40).Or("name like ?", "林%").OrderBy("Id desc").Find(&docList2) ?
? ? fmt.Println("docList2:", docList2) ?

? ? //查詢分頁 ?
? ? docList3 := make([]models.DoctorTb, 0) ?
? ? page := 0 ? ? //頁索引 ?
? ? pageSize := 2 //每頁數(shù)據 ?
? ? limit := pageSize ?
? ? start := page * pageSize ?
? ? totalCount, err := engine.Where("age > ? or name like ?", 40, "林%").Limit(limit, start).FindAndCount(&docList3) ?
? ? fmt.Println("總記錄數(shù):", totalCount, "docList3:", docList3) ?

? ? //直接用語句查詢 ?
? ? docList4 := make([]models.DoctorTb, 0) ?
? ? engine.SQL("select * from doctor_tb where age > ?", 40).Find(&docList4) ?
? ? fmt.Println("docList4:", docList4) ?

? ? //刪除 ?
? ? docDel := models.DoctorTb{Name: "王醫(yī)生"} ?
? ? iDel, _ := engine.Delete(&docDel) ?
? ? fmt.Println("刪除結果:", iDel) ?

? ? //刪除方式 2 ?
? ? engine.Exec("delete from doctor_tb where Id = ?", 3) ?

? ? //更新數(shù)據 ?
? ? doc5 := models.DoctorTb{Name: "鐘醫(yī)生"} ?
? ? //更新數(shù)據 ID 為 2 的記錄名字更改為“鐘醫(yī)生” ?
? ? iUpdate, _ := engine.Id(2).Update(&doc5) ?
? ? fmt.Println("更新結果:", iUpdate) ?

? ? //指定表名查詢。Table() ?
? ? user := models.UserTb{Id: 2} ?
? ? b, _ = engine.Table("user_tb").Get(&user) ?
? ? fmt.Println(user) ?

? ? //事務 ?
? ? session := engine.NewSession() ?
? ? defer session.Close() ?
? ? err = session.Begin() ?
? ? _, err = session.Exec("delete from doctor_tb where Id = ?", 6) ?
? ? if err != nil { ?
? ? ? ? session.Rollback() ?
? ? ? ? return ?
? ? } ?
? ? _, err = session.Exec("delete from user_tb where Id = ?", 10) ?
? ? if err != nil { ?
? ? ? ? session.Rollback() ?
? ? ? ? return ?
? ? } ?
? ? err = session.Commit() ?
? ? if err != nil { ?
? ? ? ? return ?
? ? } ?
? ? fmt.Println("事務執(zhí)行成功") ?
} ?

總結:
歸納下使用流程 1、下載 xorm 包和 cmd 工具包 2、復制 cmd 工具包里的模板代碼文件夾至生成目錄底下 3、使用 reverse 生成數(shù)據結構代碼,省去苦力活 4、實例引擎
xorm.NewEngine()

5、痛快的調用

demo 里提供了我們開發(fā)業(yè)務上常用的增,刪,改,查單條數(shù)據,查列表,查分頁,事務等內容。

到此這篇關于Go 使用xorm操作mysql詳情的文章就介紹到這了,更多相關Go 使用xorm操作mysql內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 通過手機案例理解Go設計模式之裝飾器模式的功能屬性

    通過手機案例理解Go設計模式之裝飾器模式的功能屬性

    這篇文章主要為大家介紹了Go設計模式之裝飾器模式的功能屬性,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • golang中xorm的基本使用說明

    golang中xorm的基本使用說明

    這篇文章主要介紹了golang中xorm的基本使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang croncli 定時器命令詳解

    golang croncli 定時器命令詳解

    定時器是執(zhí)行任務時的常用功能,配置系統(tǒng)的定時任務太麻煩,所以就想用golang簡單實現(xiàn)一個定時器命令,包括定時器命令格式、定時執(zhí)行命令的相關知識,感興趣的朋友跟隨小編一起看看吧
    2022-03-03
  • 一文帶你搞懂Golang依賴注入的設計與實現(xiàn)

    一文帶你搞懂Golang依賴注入的設計與實現(xiàn)

    在現(xiàn)代的 web 框架里面,基本都有實現(xiàn)了依賴注入的功能,可以讓我們很方便地對應用的依賴進行管理。今天我們來看看 go 里面實現(xiàn)依賴注入的一種方式,感興趣的可以了解一下
    2023-01-01
  • Windows+Linux系統(tǒng)下Go語言環(huán)境安裝配置過程

    Windows+Linux系統(tǒng)下Go語言環(huán)境安裝配置過程

    Go 語言被設計成一門應用于搭載 Web 服務器,存儲集群或類似用途的巨型中央服務器的系統(tǒng)編程語言。這篇文章主要介紹了Windows+Linux系統(tǒng)下Go語言環(huán)境搭建配置過程,針對每種系統(tǒng)給大家講解的非常詳細,需要的朋友可以參考下
    2021-06-06
  • GO語言實現(xiàn)的端口掃描器分享

    GO語言實現(xiàn)的端口掃描器分享

    這篇文章主要介紹了GO語言實現(xiàn)的端口掃描器分享,本文直接給出實現(xiàn)代碼,代碼中包含大量注釋,需要的朋友可以參考下
    2014-10-10
  • Go語言實現(xiàn)AzDG可逆加密算法實例

    Go語言實現(xiàn)AzDG可逆加密算法實例

    這篇文章主要介紹了Go語言實現(xiàn)AzDG可逆加密算法,實例分析了AzDG可逆加密算法的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go語言常見設計模式之裝飾模式詳解

    Go語言常見設計模式之裝飾模式詳解

    在?Go?語言中,雖然裝飾模式沒有像?Python?中應用那么廣泛,但也有其用武之地,這篇文章我們就來一起看下裝飾模式在?Go?語言中的應用吧
    2023-07-07
  • 詳解golang的切片擴容機制

    詳解golang的切片擴容機制

    golang的切片擴容機制是golang面試者繞不開的一扇大門,無論在面試提問,或者面試情景上都繞不開它,今天就說說我理解下的切片擴容機制,感興趣的小伙伴跟著小編一起來看看吧
    2023-07-07
  • golang中配置?sql.DB獲得更好的性能

    golang中配置?sql.DB獲得更好的性能

    這篇文章主要介紹了golang中如何配置?sql.DB獲得更好的性能,在這篇文章中,我想準確解釋這些設置的作用,并展示它們可能產生的(積極和消極)影響,需要的朋友可以參考下
    2023-10-10

最新評論