日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql连接 xorm_golang 使用xorm操作mysql

發(fā)布時(shí)間:2024/3/24 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql连接 xorm_golang 使用xorm操作mysql 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

xorm

官方介紹:xorm是一個(gè)簡(jiǎn)單而強(qiáng)大的Go語(yǔ)言O(shè)RM庫(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/

中文文檔:https://books.studygolang.com...

安裝

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

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/xorm

go get github.com/go-xorm/cmd

下載完成后github.com文件夾下會(huì)出現(xiàn)go-xorm包

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

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

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

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

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

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

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

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

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

我們能看到生成了和表名同名的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)降膶?xiě)法

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)鍵字。

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ù)庫(kù)

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ù)庫(kù)

fmt.Println("數(shù)據(jù)庫(kù)鏈接成功")

//查詢(xún)單條數(shù)據(jù)

var doc models.DoctorTb

b, _ := engine.Where("name = ?", "鐘南山").Get(&doc)

if b {

fmt.Println(doc)

} else {

fmt.Println("數(shù)據(jù)不存在")

}

//查詢(xún)單條數(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)

//查詢(xún)列表

docList := make([]models.DoctorTb, 0)

engine.Where("age > ? or name like ?", 40, "林%").Find(&docList)

fmt.Println("docList:", docList)

//查詢(xún)列表方式2

docList2 := make([]models.DoctorTb, 0)

engine.Where("age > ?", 40).Or("name like ?", "林%").OrderBy("Id desc").Find(&docList2)

fmt.Println("docList2:", docList2)

//查詢(xún)分頁(yè)

docList3 := make([]models.DoctorTb, 0)

page := 0 //頁(yè)索引

pageSize := 2 //每頁(yè)數(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)

//直接用語(yǔ)句查詢(xún)

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)

//指定表名查詢(xún).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里提供了我們開(kāi)發(fā)業(yè)務(wù)上常用的增,刪,改,查單條數(shù)據(jù),查列表,查分頁(yè),事務(wù)等內(nèi)容。

如果文章對(duì)你有用,請(qǐng)點(diǎn)個(gè)贊。

有疑問(wèn)加站長(zhǎng)微信聯(lián)系(非本文作者)

總結(jié)

以上是生活随笔為你收集整理的mysql连接 xorm_golang 使用xorm操作mysql的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。