一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

golang orm庫(kù)xorm的使用和項(xiàng)目結(jié)構(gòu)

馬哥Linux運(yùn)維 ? 來(lái)源:SegmentFault ? 作者:葉子 ? 2021-10-29 10:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

xorm

官方介紹:xorm 是一個(gè)簡(jiǎn)單而強(qiáng)大的 Go 語(yǔ)言 ORM 庫(kù)。通過(guò)它可以使數(shù)據(jù)庫(kù)操作非常簡(jiǎn)便。xorm 的目標(biāo)并不是讓你完全不去學(xué)習(xí) SQL,我們認(rèn)為 SQL 并不會(huì)為 ORM 所替代,但是 ORM 將可以解決絕大部分的簡(jiǎn)單 SQL 需求。xorm 支持兩種風(fēng)格的混用。

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

安裝

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

91f75918-37df-11ec-82a8-dac502259ad0.png

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

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

9229eb62-37df-11ec-82a8-dac502259ad0.png

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

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

926b1376-37df-11ec-82a8-dac502259ad0.png

929e8774-37df-11ec-82a8-dac502259ad0.png

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

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

92e5a212-37df-11ec-82a8-dac502259ad0.png

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

930c6d84-37df-11ec-82a8-dac502259ad0.png

3、打開 cmd 命令行窗口,進(jìn)入 xorm_models 目錄下,執(zhí)行 reverse 命令:xorm reverse [數(shù)據(jù)庫(kù)類型] [數(shù)據(jù)庫(kù)連接串] [模板目錄](méi)
xormreversemysqlroot:112233@tcp(127.0.0.1:3305)/test?charset=utf8templates/goxorm

935524b6-37df-11ec-82a8-dac502259ad0.png

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

9387727c-37df-11ec-82a8-dac502259ad0.png

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

packagemodels
import(
"time"
)
typeDoctorTbstruct{
Idint`xorm:"notnullpkautoincrINT(11)"`
Namestring`xorm:"default''comment('姓名')VARCHAR(50)"`
Ageint`xorm:"default0comment('年齡')INT(11)"`
Sexint`xorm:"default0comment('性別')INT(11)"`
Addtimetime.Time`xorm:"DATETIME"`
}

使用 xorm

xorm 支持鏈?zhǔn)降膶懛?code style="margin-right:2px;margin-left:2px;padding:2px 4px;font-size:14px;font-family:'Operator Mono', Consolas, Monaco, Menlo, monospace;color:rgb(233,105,0);background:rgb(248,248,248);">engine.Where("age > ?", 40).Or("name like ?", "林%").OrderBy("Id desc").Find(&docList2)也支持直接執(zhí)行 sql 語(yǔ)句engine.SQL("select * from doctor_tb where age > ?", 40).Find(&docList4)

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

packagemain

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

funcmain(){

varengine*xorm.Engine
//連接數(shù)據(jù)庫(kù)
engine,err:=xorm.NewEngine("mysql","root:112233@tcp(127.0.0.1:3305)/test?charset=utf8")
iferr!=nil{
fmt.Println(err)
return
}
//連接測(cè)試
iferr:=engine.Ping();err!=nil{
fmt.Println(err)
return
}
deferengine.Close()//延遲關(guān)閉數(shù)據(jù)庫(kù)
fmt.Println("數(shù)據(jù)庫(kù)鏈接成功")

//查詢單條數(shù)據(jù)
vardocmodels.DoctorTb
b,_:=engine.Where("name=?","鐘南山").Get(&doc)
ifb{
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>?ornamelike?",40,"林%").Find(&docList)
fmt.Println("docList:",docList)

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

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

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

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

//刪除方式2
engine.Exec("deletefromdoctor_tbwhereId=?",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()
defersession.Close()
err=session.Begin()
_,err=session.Exec("deletefromdoctor_tbwhereId=?",6)
iferr!=nil{
session.Rollback()
return
}
_,err=session.Exec("deletefromuser_tbwhereId=?",10)
iferr!=nil{
session.Rollback()
return
}
err=session.Commit()
iferr!=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ù),查列表,查分頁(yè),事務(wù)等內(nèi)容。如果文章對(duì)你有用,請(qǐng)點(diǎn)個(gè)贊。

轉(zhuǎn)自:segmentfault.com/a/1190000022023758

責(zé)任編輯:haq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 語(yǔ)言
    +關(guān)注

    關(guān)注

    1

    文章

    97

    瀏覽量

    24482
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4895

    瀏覽量

    70498

原文標(biāo)題:Go 使用xorm操作mysql

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    AD庫(kù)封裝庫(kù)安裝教程

    電子發(fā)燒友網(wǎng)站提供《AD庫(kù)封裝庫(kù)安裝教程.pdf》資料免費(fèi)下載
    發(fā)表于 06-19 15:35 ?3次下載

    SQLSERVER數(shù)據(jù)庫(kù)是什么

    SQL Server 是由微軟公司開發(fā)的一款 關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS) ,用于存儲(chǔ)、管理和檢索結(jié)構(gòu)化數(shù)據(jù)。它是企業(yè)級(jí)應(yīng)用中廣泛使用的數(shù)據(jù)庫(kù)解決方案之一,尤其適用于Windows平臺(tái),但也
    的頭像 發(fā)表于 05-26 09:19 ?374次閱讀

    golang內(nèi)存分配

    作者:錢文 Go 的分配采用了類似 tcmalloc 的結(jié)構(gòu).特點(diǎn): 使用一小塊一小塊的連續(xù)內(nèi)存頁(yè), 進(jìn)行分配某個(gè)范圍大小的內(nèi)存需求. 比如某個(gè)連續(xù) 8KB 專門用于分配 17-24 字節(jié),以此減少
    的頭像 發(fā)表于 03-31 15:00 ?168次閱讀
    <b class='flag-5'>golang</b>內(nèi)存分配

    打算使用STM32F407VET6做主控做項(xiàng)目,請(qǐng)問(wèn)庫(kù)文件從哪里下載?

    目前打算使用STM32F407VET6做主控做項(xiàng)目,請(qǐng)問(wèn)庫(kù)文件從哪里下載?想?yún)⒖祭锩骖~例子 謝謝!
    發(fā)表于 03-11 07:49

    NucleiStudio編譯沒(méi)報(bào)錯(cuò)但是項(xiàng)目結(jié)構(gòu)中有錯(cuò),為什么?

    想請(qǐng)教一下各位大佬為什么這個(gè)軟件在Project Explorer頁(yè)面明明顯示有錯(cuò)誤,但點(diǎn)擊左上角的build按鈕卻不報(bào)錯(cuò)呢,不太理解這個(gè)項(xiàng)目結(jié)構(gòu)啊。。。是某部分沒(méi)有include目錄嗎?項(xiàng)目
    發(fā)表于 03-07 15:29

    鴻蒙Flutter實(shí)戰(zhàn):14-現(xiàn)有Flutter 項(xiàng)目支持鴻蒙 II

    /setting.json 文件, 和.fvmrc 文件 fvm use 3.22.0 初始化工作區(qū)間 創(chuàng)建目錄,項(xiàng)目結(jié)構(gòu)如下所示: . ├──packages │├── apps#該目錄用于存放各端應(yīng)用殼工程
    發(fā)表于 12-26 14:59

    軟通動(dòng)力武漢項(xiàng)目主體結(jié)構(gòu)全面封頂

    在東湖高新區(qū)黨工委委員、管委會(huì)副主任、中心城黨委書記錢德平與軟通動(dòng)力董事長(zhǎng)兼首席執(zhí)行官劉天文的共同見(jiàn)證下,軟通動(dòng)力武漢交付中心項(xiàng)目完成主體結(jié)構(gòu)全面封頂,展示著軟通動(dòng)力扎根武漢的決心。
    的頭像 發(fā)表于 12-11 14:07 ?600次閱讀

    如何快速入門HAL庫(kù)編程 HAL庫(kù)與裸機(jī)編程的比較

    。 選擇開發(fā)環(huán)境和工具 : 下載并安裝適用于目標(biāo)微控制器的IDE(如STM32CubeIDE)。 配置開發(fā)環(huán)境,包括編譯器、調(diào)試器等。 學(xué)習(xí)HAL庫(kù)文檔和教程 : 閱讀官方HAL庫(kù)文檔,了解HAL庫(kù)
    的頭像 發(fā)表于 12-02 11:39 ?1066次閱讀

    Golang配置代理方法

    由于一些客觀原因的存在,我們開發(fā) Golang 項(xiàng)目的過(guò)程總會(huì)碰到無(wú)法下載某些依賴包的問(wèn)題。這不是一個(gè)小問(wèn)題,因?yàn)槟愕墓ぷ鲿?huì)被打斷,即便你使用各種神通解決了問(wèn)題,很可能這時(shí)你的線程已經(jīng)切換到其他的事情上了(痛恨思路被打斷!)。所以最好是一開始我們就重視這個(gè)問(wèn)題,并一勞永逸
    的頭像 發(fā)表于 11-11 11:17 ?1002次閱讀
    <b class='flag-5'>Golang</b>配置代理方法

    多維表格數(shù)據(jù)庫(kù)Teable的適用場(chǎng)景?

    Teable多維表格數(shù)據(jù)庫(kù)是一款功能強(qiáng)大的云端數(shù)據(jù)庫(kù)和協(xié)作工具,結(jié)合了電子表格的靈活性和數(shù)據(jù)庫(kù)的強(qiáng)大功能,適用企業(yè)內(nèi)部項(xiàng)目管理 數(shù)據(jù)收集與整理 內(nèi)容管理與創(chuàng)意協(xié)作 客戶關(guān)系管理
    的頭像 發(fā)表于 10-31 15:48 ?808次閱讀

    請(qǐng)問(wèn)esp-csi項(xiàng)目中radar庫(kù)是閉源的嗎?

    最近在學(xué)習(xí) esp-csi 項(xiàng)目,發(fā)現(xiàn)里面依賴的 esp-radar 庫(kù)是二進(jìn)制形式提供的,請(qǐng)問(wèn)這是開源的嗎?如果是的話源碼鏈接能否發(fā)一下?
    發(fā)表于 09-26 07:15

    架構(gòu)師日記-從數(shù)據(jù)庫(kù)發(fā)展歷程到數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)探析

    一 數(shù)據(jù)庫(kù)發(fā)展史 起初,數(shù)據(jù)的管理方式是文件系統(tǒng),數(shù)據(jù)存儲(chǔ)在文件中,數(shù)據(jù)管理和維護(hù)都由程序員完成。后來(lái)發(fā)展出樹形結(jié)構(gòu)和網(wǎng)狀結(jié)構(gòu)的數(shù)據(jù)庫(kù),但都存在著難以擴(kuò)展和維護(hù)的問(wèn)題。直到七十年代,關(guān)
    的頭像 發(fā)表于 09-25 11:20 ?1122次閱讀
    架構(gòu)師日記-從數(shù)據(jù)<b class='flag-5'>庫(kù)</b>發(fā)展歷程到數(shù)據(jù)<b class='flag-5'>結(jié)構(gòu)</b>設(shè)計(jì)探析

    【米爾NXP i.MX 93開發(fā)板試用評(píng)測(cè)】4、使用golang搭建Modbus 服務(wù)器

    負(fù)責(zé)處理來(lái)自客戶端(通常稱為Modbus客戶端或從站)的請(qǐng)求,并根據(jù)請(qǐng)求提供相應(yīng)的數(shù)據(jù)或執(zhí)行操作。 快速開發(fā)modbus服務(wù)器 可以使用golang快速部署一個(gè)modbus服務(wù)器。我們先在開發(fā)板上安裝
    發(fā)表于 09-21 22:51

    轉(zhuǎn)載 golang內(nèi)存分配

    Go 的分配采用了類似 tcmalloc 的結(jié)構(gòu).特點(diǎn): 使用一小塊一小塊的連續(xù)內(nèi)存頁(yè), 進(jìn)行分配某個(gè)范圍大小的內(nèi)存需求. 比如某個(gè)連續(xù) 8KB 專門用于分配 17-24 字節(jié),以此減少內(nèi)存碎片
    的頭像 發(fā)表于 09-05 14:12 ?471次閱讀
    轉(zhuǎn)載 <b class='flag-5'>golang</b>內(nèi)存分配

    請(qǐng)問(wèn)如何將cURL庫(kù)添加到ESP8266_RTOS_SDK項(xiàng)目中?

    我想使用 curl api,但我不知道如何將庫(kù)添加到我的項(xiàng)目中,這樣當(dāng)我將該庫(kù)的頭文件包含在我的項(xiàng)目中時(shí)它就不會(huì)抱怨。 有誰(shuí)知道如何正確地將第三方庫(kù)
    發(fā)表于 07-09 07:52