亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go?使用xorm操作mysql詳情

 更新時(shí)間:2022年01月26日 09:27:06   作者:運(yùn)維派  
這篇文章主要介紹了Go?使用xorm操作mysql詳情,golang?orm?庫?xorm?的使用和項(xiàng)目結(jié)構(gòu)。更多詳細(xì)neural,需要的小伙伴可以參考下面文章內(nèi)容

xorm

官方介紹:xorm 是一個(gè)簡(jiǎn)單而強(qiáng)大的 Go 語言 ORM 庫。

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

xorm 的目標(biāo)并不是讓你完全不去學(xué)習(xí) SQL,我們認(rèn)為 SQL 并不會(huì)為 ORM 所替代,但是 ORM 將可以解決絕大部分的簡(jiǎn)單 SQL 需求。

xorm 支持兩種風(fēng)格的混用。  

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

安裝

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

1、xorm 驅(qū)動(dòng)包,我們使用 xorm 的核心包 2、cmd 工具包,用于使用 reverse 命令生成數(shù)據(jù)表對(duì)應(yīng)的 struct

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

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

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

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

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

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

我們能看到生成了和表名同名的 2 個(gè)數(shù)據(jù)結(jié)構(gòu)文件 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 支持鏈?zhǔn)降膶懛?/p>

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)

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

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ù)據(jù)庫 ?
? ? engine, err := xorm.NewEngine("mysql", "root:112233@tcp(127.0.0.1:3305)/test?charset=utf8") ?
? ? if err != nil { ?
? ? ? ? fmt.Println(err) ?
? ? ? ? return ?
? ? } ?
? ? //連接測(cè)試 ?
? ? if err := engine.Ping(); err != nil { ?
? ? ? ? fmt.Println(err) ?
? ? ? ? return ?
? ? } ?
? ? defer engine.Close() //延遲關(guān)閉數(shù)據(jù)庫 ?
? ? fmt.Println("數(shù)據(jù)庫鏈接成功") ?

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

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

? ? //新增數(shù)據(jù) ?
? ? doc3 := models.DoctorTb{0, "王醫(yī)生", 48, 1, time.Now()} ?
? ? i3, _ := engine.InsertOne(doc3) ?
? ? fmt.Println("新增結(jié)果:", 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ù)據(jù) ?
? ? 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("刪除結(jié)果:", iDel) ?

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

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

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

? ? //事務(wù) ?
? ? 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("事務(wù)執(zhí)行成功") ?
} ?

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

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

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

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

相關(guān)文章

  • 通過手機(jī)案例理解Go設(shè)計(jì)模式之裝飾器模式的功能屬性

    通過手機(jī)案例理解Go設(shè)計(jì)模式之裝飾器模式的功能屬性

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

    golang中xorm的基本使用說明

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

    golang croncli 定時(shí)器命令詳解

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

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

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

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

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

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

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

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

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

    Go語言常見設(shè)計(jì)模式之裝飾模式詳解

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

    詳解golang的切片擴(kuò)容機(jī)制

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

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

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

最新評(píng)論