日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

golang orm庫xorm的使用和項目結(jié)構(gòu)

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

掃碼添加小助手

加入工程師交流群

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

xorm

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

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

安裝

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

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

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

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

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

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

本地數(shù)據(jù)庫 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)在就來生成這 2 張數(shù)據(jù)表的結(jié)構(gòu)模型。

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

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

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

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

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

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

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

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

我們能看到生成了和表名同名的 2 個數(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 語句engine.SQL("select * from doctor_tb where age > ?", 40).Find(&docList4)

附上增刪改查事務(wù)的 demo 例子,代碼里都有注釋,很容易看懂。xorm 的封裝比較友好,只要熟悉 sql 語句,即便不看文檔,也能順利的使用各種關(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ù)庫
engine,err:=xorm.NewEngine("mysql","root:112233@tcp(127.0.0.1:3305)/test?charset=utf8")
iferr!=nil{
fmt.Println(err)
return
}
//連接測試
iferr:=engine.Ping();err!=nil{
fmt.Println(err)
return
}
deferengine.Close()//延遲關(guān)閉數(shù)據(jù)庫
fmt.Println("數(shù)據(jù)庫鏈接成功")

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

//查詢單條數(shù)據(jù)方式2會根據(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)

//查詢分頁
docList3:=make([]models.DoctorTb,0)
page:=0//頁索引
pageSize:=2//每頁數(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)

//直接用語句查詢
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、實例引擎xorm.NewEngine()5、痛快的調(diào)用

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

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

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

    關(guān)注

    1

    文章

    97

    瀏覽量

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

    關(guān)注

    30

    文章

    4977

    瀏覽量

    74417

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    NVIDIA推出cuEST量子化學(xué)加速

    本周,NVIDIA 發(fā)布了 NVIDIA cuEST。這是一款全新的 NVIDIA CUDA-X ,可將電子結(jié)構(gòu)計算遷移到 GPU 上執(zhí)行。應(yīng)用材料公司、三星、新思科技和 TSMC 已率先采用。
    的頭像 發(fā)表于 03-23 15:11 ?527次閱讀

    cJSON是什么?

    cJSON是什么?cJSON是一個輕量級的json解析。使用起來非常簡單,整個非常地簡潔,核心功能的實現(xiàn)都在cJSON.c文件,非常適合閱讀源代碼來學(xué)習(xí)C語言。最近讀完這個的源
    發(fā)表于 01-29 07:13

    Keil MDK生成LIB及使用LIB

    ) { ....... } 將這兩個文件添加到項目中(只需要添加生成所需要的頭文件和源文件),并做以下設(shè)置: 選中Create Library 3. 編譯之后在目錄下生成對應(yīng)的.LIB文件了
    發(fā)表于 01-22 07:17

    軟通動力中標(biāo)中國商飛產(chǎn)品結(jié)構(gòu)系統(tǒng)項目

    軟通動力成功中標(biāo)上海航空工業(yè)(集團)有限公司“基于產(chǎn)品組織和更改迭代的全過程集成產(chǎn)品結(jié)構(gòu)(XBOM)系統(tǒng)項目”(簡稱“產(chǎn)品結(jié)構(gòu)(XBOM)系統(tǒng)項目”),此舉標(biāo)志著公司在高端裝備制造數(shù)字
    的頭像 發(fā)表于 12-19 13:58 ?655次閱讀

    一文詳解SystemC仿真的編譯

    AMD Vivado 設(shè)計套件以文件和的形式提供仿真模型。仿真包含器件和 IP 的行為和時序模型。編譯后的可供多個設(shè)計項目使用。用戶必須在設(shè)計仿真之前通過名為 compile_s
    的頭像 發(fā)表于 12-12 15:08 ?5093次閱讀
    一文詳解SystemC仿真<b class='flag-5'>庫</b>的編譯

    技術(shù)解析:58同城房產(chǎn)數(shù)據(jù)平臺 - 根據(jù)項目ID獲取詳情數(shù)據(jù)的API接口實踐

    基于項目ID獲取詳情數(shù)據(jù)的常見技術(shù)實現(xiàn)路徑。 一、 接口基本原理 58同城平臺的房產(chǎn)項目詳情頁通常對應(yīng)一個唯一的項目ID。平臺后端會提供相應(yīng)的接口服務(wù),接收前端或API調(diào)用方傳入的項目
    的頭像 發(fā)表于 11-21 14:58 ?520次閱讀
    技術(shù)解析:58同城房產(chǎn)數(shù)據(jù)平臺 - 根據(jù)<b class='flag-5'>項目</b>ID獲取詳情數(shù)據(jù)的API接口實踐

    物聯(lián)網(wǎng)短信實戰(zhàn):SMS收發(fā)功能速成來啦!

    在物聯(lián)網(wǎng)開發(fā)中,短信收發(fā)是常見需求。本文帶來一場技術(shù)實戰(zhàn),借助SMS,10分鐘內(nèi)即可實現(xiàn)物聯(lián)網(wǎng)短信的收發(fā)。通過簡單易懂的教程,讓你快速掌握這項功能,為物聯(lián)網(wǎng)項目賦能。 ? SMS核心主要支持如下
    的頭像 發(fā)表于 10-21 17:09 ?971次閱讀
    物聯(lián)網(wǎng)短信實戰(zhàn):SMS<b class='flag-5'>庫</b>收發(fā)功能速成來啦!

    【HZ-T536開發(fā)板免費體驗】5、安裝sqlite3和使用golang讀寫數(shù)據(jù)

    如果想在嵌入式設(shè)備上實現(xiàn)簡單的設(shè)備管理功能,需要數(shù)據(jù)和服務(wù)后端程序。服務(wù)端程序,我更傾向使用golang來實現(xiàn)。 安裝sqlite3,使用ubuntu環(huán)境,可以直接用apt install安裝程序
    發(fā)表于 08-26 00:04

    靈活高效ZBUFF — C內(nèi)存數(shù)據(jù)操作:優(yōu)化內(nèi)存管理的利器

    在C語言開發(fā)中,高效的內(nèi)存管理是提升程序性能的關(guān)鍵。ZBUFF作為一款靈活高效的內(nèi)存數(shù)據(jù)操作,通過優(yōu)化內(nèi)存分配與釋放機制,為開發(fā)者提供了更簡潔、更安全的API接口,極大地簡化了復(fù)雜數(shù)據(jù)結(jié)構(gòu)的處理
    的頭像 發(fā)表于 08-14 18:01 ?829次閱讀
    靈活高效ZBUFF — C內(nèi)存數(shù)據(jù)操作<b class='flag-5'>庫</b>:優(yōu)化內(nèi)存管理的利器

    景旺電子泰國項目主體結(jié)構(gòu)順利封頂

    近日,隨著最后一塊頂板混凝土完成澆筑,景旺電子(泰國)有限公司項目(后文簡稱“項目”)主體結(jié)構(gòu)順利封頂。這一進(jìn)展標(biāo)志著該項目自此邁入設(shè)備安裝與投產(chǎn)籌備的新階段,為景旺電子深化國際化戰(zhàn)略
    的頭像 發(fā)表于 07-30 16:32 ?1486次閱讀

    數(shù)據(jù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)被加密如何恢復(fù)數(shù)據(jù)?

    SQL Server數(shù)據(jù)故障: SQL Server數(shù)據(jù)被加密,無法使用。 數(shù)據(jù)MDF、LDF、log日志文件名字被篡改。
    的頭像 發(fā)表于 06-25 13:54 ?871次閱讀
    數(shù)據(jù)<b class='flag-5'>庫</b>數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)<b class='flag-5'>庫</b>被加密如何恢復(fù)數(shù)據(jù)?

    AD封裝安裝教程

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

    基于STM32 HAL與標(biāo)準(zhǔn)的esp8266接入機智云方案(二)

    ,我們還將討論如何移植HAL和標(biāo)準(zhǔn)以實現(xiàn)與機智云的兼容,幫助開發(fā)者更高效地完成項目的云平臺接入。代碼下載注意:此時手機app端的該設(shè)備為網(wǎng)頁端的虛擬設(shè)備僅僅是
    的頭像 發(fā)表于 05-28 18:02 ?1681次閱讀
    基于STM32 HAL<b class='flag-5'>庫</b>與標(biāo)準(zhǔn)<b class='flag-5'>庫</b>的esp8266接入機智云方案(二)

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

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

    MySQL數(shù)據(jù)是什么

    MySQL數(shù)據(jù)是一種 開源的關(guān)系型數(shù)據(jù)管理系統(tǒng)(RDBMS) ,由瑞典MySQL AB公司開發(fā),后被Oracle公司收購。它通過結(jié)構(gòu)化查詢語言(SQL)進(jìn)行數(shù)據(jù)存儲、管理和操作,廣泛應(yīng)用于Web
    的頭像 發(fā)表于 05-23 09:18 ?1475次閱讀
    鹤壁市| 怀安县| 米林县| 揭阳市| 玛沁县| 彭州市| 凭祥市| 安宁市| 瑞丽市| 岗巴县| 巫山县| 道真| 南京市| 普格县| 和平县| 永靖县| 林州市| 金塔县| 镶黄旗| 望谟县| 高阳县| 怀来县| 平遥县| 新昌县| 福泉市| 华亭县| 景德镇市| 根河市| 邳州市| 永寿县| 商城县| 张家口市| 馆陶县| 鹤壁市| 乌鲁木齐市| 大安市| 高安市| 琼海市| 兴宁市| 正镶白旗| 织金县|