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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql连接 xorm_golang 使用xorm操作mysql

發布時間:2024/3/24 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql连接 xorm_golang 使用xorm操作mysql 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

xorm

官方介紹:xorm是一個簡單而強大的Go語言ORM庫. 通過它可以使數據庫操作非常簡便。xorm的目標并不是讓你完全不去學習SQL,我們認為SQL并不會為ORM所替代,但是ORM將可以解決絕大部分的簡單SQL需求。xorm支持兩種風格的混用。

xorm還提供了工具,通過reverse命令根據數據庫的表結構生成對應的struct,省去了人工組織代碼的工作,十分方便。

官方地址:https://xorm.io/

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

安裝

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

1、xorm驅動包,我們使用xorm的核心包

2、cmd工具包,用于使用reverse命令生成數據表對應的struct

通過go get命令分別下載2個包

go get github.com/go-xorm/xorm

go get github.com/go-xorm/cmd

下載完成后github.com文件夾下會出現go-xorm包

生成數據結構struct

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

我們現在就來生成這2張數據表的結構模型。

1、在任意項目下新建一個文件夾xorm_models,文件名沒有規定,為了存放生成的代碼文件。

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

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

3、打開cmd命令行窗口,進入xorm_models目錄下,執行reverse命令:xorm reverse [數據庫類型] [數據庫連接串] [模板目錄]

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

4、數據結構代碼會自動生成在xorm_models/models目錄下.

我們能看到生成了和表名同名的2個數據結構文件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)

也支持直接執行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

//連接數據庫

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() //延遲關閉數據庫

fmt.Println("數據庫鏈接成功")

//查詢單條數據

var doc models.DoctorTb

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

if b {

fmt.Println(doc)

} else {

fmt.Println("數據不存在")

}

//查詢單條數據方式2 會根據結構體的

doc2 := models.DoctorTb{Name: "鐘南山"}

b, _ = engine.Get(&doc2)

fmt.Println(doc2)

//新增數據

doc3 := models.DoctorTb{0, "王醫生", 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 //每頁數據

limit := pageSize

start := page * pageSize

totalCount, err := engine.Where("age > ? or name like ?", 40, "林%").Limit(limit, start).FindAndCount(&docList3)

fmt.Println("總記錄數:", 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: "王醫生"}

iDel, _ := engine.Delete(&docDel)

fmt.Println("刪除結果:", iDel)

//刪除方式2

engine.Exec("delete from doctor_tb where Id = ?", 3)

//更新數據

doc5 := models.DoctorTb{Name: "鐘醫生"}

//更新數據ID為2的記錄名字更改為“鐘醫生”

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("事務執行成功")

}

總結

歸納下使用流程

1、下載xorm包和cmd工具包

2、復制cmd工具包里的模板代碼文件夾至生成目錄底下

3、使用reverse生成數據結構代碼,省去苦力活

4、實例引擎xorm.NewEngine()

5、痛快的調用

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

如果文章對你有用,請點個贊。

有疑問加站長微信聯系(非本文作者)

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。