校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > go xorm框架的使用

go xorm框架的使用

熱門標簽:武漢百應人工智能電銷機器人 400手機電話免費辦理 電腦外呼系統輻射大嗎 上海企業外呼系統排名 智能語音電銷的機器人 百度地圖標注位置網站 開通400電話申請流程 如何利用高德地圖標注家 揚州電銷外呼系統軟件

一、創建數據庫連接

xorm支持單引擎和多引擎,多引擎的場景對于初學者來說,沒有必要考慮,所以我們主要學習的是單引擎的數據庫連接,為了方便檢查SQL,需要啟用打印功能,默認不開啟

var engine *xorm.Engine

func main() {
	var err error
	engine, err = xorm.NewEngine("mysql", "root:123456@tcp(127.0.0.1:3306)/myschool?charset=utf8")
	if err != nil {
		log.Println(err)
	}
    // 控制臺打印出生成的SQL語句
	engine.ShowSQL(true)
}

二、操作mysql數據庫

查詢

建表語句

CREATE TABLE `student`  (
  `id` varchar(225) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `name` varchar(225) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  `gradeid` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

CREATE TABLE `grade`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `gradename` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

struct結構體

student.go

type Student struct {
	Id      string `orm:"id,primary" json:"id"`
	Name    string `orm:"name"       json:"name"`
	Age     int    `orm:"age"        json:"age"`
	Gradeid int    `orm:"gradeid"    json:"gradeid"`
}

grade.go

type Grade struct {
	Id        int    `orm:"id,primary" json:"id"`
	Gradename string `orm:"gradename"  json:"gradename"`
}

1、Get方法

Get方法用于獲取單條數據,如:

結合Where查詢 ,寫法很多,主要是剛入門,都可以嘗試一下。最終的實現都是一個意思

var stu student.Student
has, err := engine.Where("id=?", "1").Get(stu)
  
stu := new(student.Student)
has, err := engine.Where("id=?", "1").Get(stu)
  
stu := student.Student{}
has, err := engine.Where("id=?", "1").Get(stu)
  
stu := student.Student{}
has, err := engine.Where("id=?", "1").Get(stu)
  
if err != nil {
  log.Println(err)
}
log.Println("是否存在:",has)
log.Println(stu)

結構體中已有的非空數據查詢

stu := student.Student{Id:"1"}
has, err := engine.Get(stu)
if err != nil {
   log.Println(err)
}
log.Println("是否存在:",has)
log.Println(stu)

has返回一個boolean類型,表明數據是否存在,err接收如果在查詢中產生的錯誤

2、Exist方法

Exist方法用于判斷數據是否存在,Get方法是以id字段舉例,那么現在就以name字段舉例

下面的寫法也很怪異,猜測著去寫,很多東西都可以拓展開,剛入門,看啥都很神奇,隨便舉幾個例子,后面慢慢的去嘗試

has, err := engine.Where("name=?", "少杰").Exist(student.Student{})

has, err := engine.Table(student.Student{}).Where("name=?", "少杰").Exist()

has, err := engine.Exist(student.Student{Name: "少杰"})
if err != nil {
    log.Println(err)
}
log.Println("是否存在:", has)

3、Find方法

Find方法用于查詢多條數據 ,Find方法的第一個參數為slice的指針或Map指針,即為查詢后返回的結果,第二個參數可選,為查詢的條件struct的指針。

stu := make([]student.Student, 0)
// Cols 查詢指定字段
// Limit 分頁查詢 (顯示的條數,從第幾個開始)
err := engine.Where("id=?", "1").Cols("name").Limit(10, 0).Find(stus)
if err != nil {
    log.Println(err)
}
log.Println("查詢到的信息:", stu)

查詢時可以加入各種條件,也可以不加。不加時err := engine.Find(stus)查詢所有,如果只選擇單個字段,也可使用非結構體的Slice

var strings []string
// Table 需要操作的表名稱
err := engine.Table("student").Cols("id").Find(strings)
if err != nil {
    log.Println(err)
}
log.Println("查詢到的信息:",strings)

4、Join方法

第一個參數為連接類型,當前支持INNER, LEFT OUTER, CROSS中的一個值, 第二個參數為string類型的表名,表對應的結構體指針或者為兩個值的[]string,表示表名和別名, 第三個參數為關聯鍵。

每個學生只在一個班級出現,所以對應的結構體應該加上xorm的index標記

type Student struct {
	Id      string `orm:"id,primary" json:"id"`
	Name    string `orm:"name"       json:"name"`
	Age     int    `orm:"age"        json:"age"`
	Gradeid int    `orm:"gradeid"    json:"gradeid" xorm:"index"`
}
type Grade struct {
	Id        int    `orm:"id,primary" json:"id"`
	Gradename string `orm:"gradename"  json:"gradename"`
}

如果我們想查詢出兩張表的具體數據,還需要借助xorm的extend關鍵字,類似于java中的vo,而extend關鍵字的用處就是讀取的數據引用到struct,結構體中extends標記對應的結構順序應和最終生成SQL中對應的表出現的順序相同。

type Student struct {
	modle.Student `xorm:"extends"`
	modle.Grade   `xorm:"extends"`
}

// 查詢年紀時三年紀的學生
stu := make([]Student, 0)
err := engine.Where("gradeid=?", "3").Join("INNER", "grade", "grade.id = student.gradeid").Find(stu)
if err != nil {
    log.Println(err)
}
log.Println("查詢到的信息:" , stu)

因為查詢到的數據格式時數組,如果想獲取查詢出的數據,可以采取循環數組的方式去遍歷

for _, value := range stu {
    log.Println("value:", value)
}

或者通過下標去操作stu[0]去獲取學生的信息

5、Iterate方法

Iterate方法提供逐條執行查詢到的記錄的方法,它所能使用的條件和Find方法完全相同

// Iterate 方法
err := engine.Where("age > ? ", 10).Iterate(new(modle.Student), func(i int, bean interface{}) error {
    stu := bean.(*modle.Student)
    log.Println("查詢到的信息:", stu, i)
    return nil
})

6、Count方法

統計數據使用Count方法,Count方法的參數為struct的指針并且成為查詢條件。

// Count 判斷有幾個
stuCount := new(modle.Student)
total, err := engine.Where("age >?", 10).Count(stuCount)
if err != nil {
    log.Println(err)
}
log.Println("年齡大于10的有", total, "個")

7、Rows方法

Rows方法和Iterate方法類似,提供逐條執行查詢到的記錄的方法,不過Rows更加靈活好用。

stu := new(modle.Student)
rows, err := engine.Where("age >?", 10).Rows(stu)
if err != nil {
    log.Println(err)
}
defer rows.Close()
for rows.Next() {
    err = rows.Scan(stu)
    if err != nil {
        log.Println(err)
    }
    log.Println("========", stu)
}

插入

Created可以讓您在數據插入到數據庫時自動將對應的字段設置為當前時間

engine.TZLocation, _ = time.LoadLocation("Asia/Shanghai") 改變xorm的時區

type Student struct {
	Id      string `orm:"id,primary" json:"id"`
	Name    string `orm:"name"       json:"name"`
	Age     int    `orm:"age"        json:"age"`
	Gradeid int    `orm:"gradeid"    json:"gradeid" xorm:"index"`
	CreatedTime time.Time `xorm:"created"`
}
// 創建一個結構體
var stuInsert modle.Student
stuInsert.Id = "3"
stuInsert.Name = "王五"
stuInsert.Age = 20
engine.Insert(stuInsert)

更新

// 將id=1的用戶名稱修改為少杰
var stuUpdate modle.Student
stuUpdate.Name = "少杰"
affected, err := engine.Where("id=?", "1").Update(stuUpdate)
if err != nil {
    log.Println(err)
}
log.Println("是否更新成功:", affected)

刪除

// 刪除一個id=3的學生
var stuDelete modle.Student
affected, err := engine.Where("id=?", "3").Delete(stuDelete)
if err != nil {
    log.Println(err)
}
log.Println("是否刪除成功:", affected)

Column屬性定義

name 當前field對應的字段的名稱,可選,如不寫,則自動根據field名字和轉換規則命名,如與其它關鍵字沖突,請使用單引號括起來。
pk 是否是Primary Key,如果在一個struct中有多個字段都使用了此標記,則這多個字段構成了復合主鍵,單主鍵當前支持int32,int,int64,uint32,uint,uint64,string這7種Go的數據類型,復合主鍵支持這7種Go的數據類型的組合。
當前支持30多種字段類型,詳情參見本文最后一個表格 字段類型
autoincr 是否是自增
[not ]null 或 notnull 是否可以為空
unique或unique(uniquename) 是否是唯一,如不加括號則該字段不允許重復;如加上括號,則括號中為聯合唯一索引的名字,此時如果有另外一個或多個字段和本unique的uniquename相同,則這些uniquename相同的字段組成聯合唯一索引
index或index(indexname) 是否是索引,如不加括號則該字段自身為索引,如加上括號,則括號中為聯合索引的名字,此時如果有另外一個或多個字段和本index的indexname相同,則這些indexname相同的字段組成聯合索引
extends 應用于一個匿名成員結構體或者非匿名成員結構體之上,表示此結構體的所有成員也映射到數據庫中,extends可加載無限級
- 這個Field將不進行字段映射
-> 這個Field將只寫入到數據庫而不從數據庫讀取
- 這個Field將只從數據庫讀取,而不寫入到數據庫
created 這個Field將在Insert時自動賦值為當前時間
updated 這個Field將在Insert或Update時自動賦值為當前時間
deleted 這個Field將在Delete時設置為當前時間,并且當前記錄不刪除
version 這個Field將會在insert時默認為1,每次更新自動加1
default 0或default(0) 設置默認值,緊跟的內容如果是Varchar等需要加上單引號
json 表示內容將先轉成Json格式,然后存儲到數據庫中,數據庫中的字段類型可以為Text或者二進制
comment 設置字段的注釋(當前僅支持mysql)

xorm框架簡單的使用,慢慢學習,慢慢進步,加油少年!相信自己,本文章內容可以參考文檔 http://xorm.topgoer.com/

以上就是go xorm框架的使用的詳細內容,更多關于go xorm框架的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • go 實現簡易端口掃描的示例
  • 解析Go的Waitgroup和鎖的問題
  • Go語言快速入門圖文教程
  • go語言基礎 seek光標位置os包的使用
  • Go語言獲取文件的名稱、前綴、后綴
  • Go語言 如何實現RSA加密解密
  • Go 自定義package包設置與導入操作
  • 詳解Gotorch多機定時任務管理系統

標簽:張掖 江西 嘉峪關 延邊 新余 黑龍江 武漢 宜賓

巨人網絡通訊聲明:本文標題《go xorm框架的使用》,本文關鍵詞  xorm,框架,的,使用,xorm,框架,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《go xorm框架的使用》相關的同類信息!
  • 本頁收集關于go xorm框架的使用的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    色综合久久中文字幕| 欧美精品 日韩| 亚洲国产欧美在线| 日韩欧美国产午夜精品| 久久成人麻豆午夜电影| 1000部国产精品成人观看| 色天使久久综合网天天| 免费观看一级特黄欧美大片| 国产人伦精品一区二区| 欧美日韩国产一二三| 国产精品影视在线观看| 亚洲午夜三级在线| 亚洲国产精品精华液2区45| 色婷婷综合激情| 丰满岳乱妇一区二区三区| 日本欧洲一区二区| 一区二区三区在线观看视频| 久久无码av三级| 欧美在线视频你懂得| 国产经典欧美精品| 久久精品二区亚洲w码| 性做久久久久久久久| 自拍偷拍国产亚洲| 成人免费在线视频| 18成人在线视频| 亚洲欧美在线高清| 亚洲老司机在线| 亚洲黄网站在线观看| 亚洲精品视频一区| 亚洲综合在线视频| 国产精品理伦片| 国产偷国产偷亚洲高清人白洁 | 丝袜美腿亚洲一区二区图片| 亚洲一区二区三区中文字幕 | 国产精品美日韩| 一区在线播放视频| 一区二区三区在线免费观看| 亚洲欧美一区二区三区极速播放| 国产精品欧美久久久久一区二区| 国产精品色在线观看| 一区二区三区在线观看欧美 | 亚洲免费大片在线观看| 一区二区三区不卡在线观看| 美女在线一区二区| 风间由美性色一区二区三区| 91浏览器打开| 精品播放一区二区| 亚洲国产精品欧美一二99| 经典三级视频一区| 91丨九色丨蝌蚪丨老版| 欧美一区二区黄| 亚洲毛片av在线| 国产一区二区三区在线看麻豆 | 欧美性猛片aaaaaaa做受| 日韩午夜在线影院| 一区2区3区在线看| 成人黄色av网站在线| 2欧美一区二区三区在线观看视频| 亚洲综合久久久| 成人av电影在线观看| 日韩三级精品电影久久久| 一区二区三区四区视频精品免费 | 91精品一区二区三区在线观看| 欧美激情一区在线| 久久精品99久久久| 欧美大黄免费观看| 久久99热这里只有精品| 91精品国产美女浴室洗澡无遮挡| 国产精品国产三级国产普通话蜜臀 | 91 com成人网| 日日欢夜夜爽一区| 精品国产免费久久| 99久久er热在这里只有精品66| 亚洲精品在线三区| 国产精品影音先锋| 中文字幕第一区二区| av中文字幕在线不卡| 亚洲少妇30p| 3d动漫精品啪啪| 国内成+人亚洲+欧美+综合在线| ww亚洲ww在线观看国产| 岛国一区二区三区| 亚洲一二三四在线观看| 2023国产精品视频| 成人午夜av影视| 一区二区三区波多野结衣在线观看| 色偷偷成人一区二区三区91| 视频一区二区国产| 久久久夜色精品亚洲| 91蝌蚪porny| 国产在线日韩欧美| 亚洲国产另类av| 国产亚洲精品中文字幕| 欧美日本在线一区| 91在线视频18| 懂色av一区二区三区免费看| 亚洲mv在线观看| 亚洲免费资源在线播放| 欧美激情一区二区三区不卡| 日韩无一区二区| 日韩视频不卡中文| 91精品在线观看入口| 日本高清不卡一区| 91黄色免费版| 91传媒视频在线播放| 国产成人一级电影| 精品一区二区日韩| 黄网站免费久久| 国产麻豆精品一区二区| 日本不卡一区二区三区 | 亚洲主播在线观看| 亚洲国产中文字幕| 五月激情综合色| 国产精品亚洲а∨天堂免在线| 五月综合激情网| 奇米亚洲午夜久久精品| 美女视频网站久久| 国产原创一区二区三区| 国产精品中文欧美| 色婷婷av一区二区三区之一色屋| 欧美在线制服丝袜| 91精品国产91久久久久久最新毛片 | 91精品国产综合久久福利软件| 欧美老肥妇做.爰bbww| 亚洲精品一区二区三区影院| 久久久蜜臀国产一区二区| 国产亚洲美州欧州综合国| 亚洲欧洲综合另类| 久久不见久久见中文字幕免费| 国产精品一二三四| 色av成人天堂桃色av| 精品国内片67194| 亚洲一级不卡视频| 福利电影一区二区三区| 播五月开心婷婷综合| 欧美日韩三级一区| 国产精品二三区| 国产在线一区二区| 欧美高清精品3d| 国产精品另类一区| 国产在线视频一区二区三区| 91精品国产综合久久福利软件| 国产精品久久久久久亚洲毛片| 秋霞成人午夜伦在线观看| 欧美无砖砖区免费| 亚洲图片另类小说| 国产成人精品亚洲午夜麻豆| 精品捆绑美女sm三区| 麻豆精品视频在线观看视频| 欧美群妇大交群中文字幕| 国产精品剧情在线亚洲| 国产成人aaaa| 国产嫩草影院久久久久| 奇米影视在线99精品| 7777女厕盗摄久久久| 天天综合网 天天综合色| 91.com在线观看| 久久www免费人成看片高清| 日韩免费高清电影| 国产成人亚洲综合a∨婷婷| 亚洲欧洲三级电影| 欧美网站一区二区| 蜜桃免费网站一区二区三区| 欧美成人精精品一区二区频| 久久成人久久爱| 国产精品国产三级国产aⅴ中文| 91麻豆123| 国产乱码精品一区二区三区忘忧草 | 亚洲va欧美va人人爽午夜| 7777精品伊人久久久大香线蕉完整版| 丝袜美腿高跟呻吟高潮一区| 欧美大片日本大片免费观看| 国产一区二区电影| 一区二区三区日韩在线观看| 在线播放91灌醉迷j高跟美女| 国产制服丝袜一区| 婷婷国产在线综合| 亚洲精品欧美在线| 日韩视频中午一区| 91久久精品网| 99视频热这里只有精品免费| 美女网站色91| 亚洲高清在线精品| 欧美国产日产图区| 国产亚洲精品福利| 欧美日产国产精品| 欧美视频在线观看一区二区| 91丝袜美女网| av成人免费在线| 成人美女视频在线观看| 免费看日韩精品| 爽好久久久欧美精品| 亚洲综合色网站| 亚洲尤物视频在线| 最好看的中文字幕久久| 国产欧美精品一区二区三区四区| 精品1区2区在线观看| 26uuu精品一区二区在线观看| 91麻豆精品国产91久久久久| 欧美高清视频在线高清观看mv色露露十八|