婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > go xorm框架的使用

go xorm框架的使用

熱門(mén)標(biāo)簽:武漢百應(yīng)人工智能電銷機(jī)器人 400手機(jī)電話免費(fèi)辦理 電腦外呼系統(tǒng)輻射大嗎 上海企業(yè)外呼系統(tǒng)排名 智能語(yǔ)音電銷的機(jī)器人 百度地圖標(biāo)注位置網(wǎng)站 開(kāi)通400電話申請(qǐng)流程 如何利用高德地圖標(biāo)注家 揚(yáng)州電銷外呼系統(tǒng)軟件

一、創(chuàng)建數(shù)據(jù)庫(kù)連接

xorm支持單引擎和多引擎,多引擎的場(chǎng)景對(duì)于初學(xué)者來(lái)說(shuō),沒(méi)有必要考慮,所以我們主要學(xué)習(xí)的是單引擎的數(shù)據(jù)庫(kù)連接,為了方便檢查SQL,需要啟用打印功能,默認(rèn)不開(kāi)啟

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)
	}
    // 控制臺(tái)打印出生成的SQL語(yǔ)句
	engine.ShowSQL(true)
}

二、操作mysql數(shù)據(jù)庫(kù)

查詢

建表語(yǔ)句

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結(jié)構(gòu)體

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方法用于獲取單條數(shù)據(jù),如:

結(jié)合Where查詢 ,寫(xiě)法很多,主要是剛?cè)腴T(mén),都可以嘗試一下。最終的實(shí)現(xiàn)都是一個(gè)意思

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)

結(jié)構(gòu)體中已有的非空數(shù)據(jù)查詢

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

has返回一個(gè)boolean類型,表明數(shù)據(jù)是否存在,err接收如果在查詢中產(chǎn)生的錯(cuò)誤

2、Exist方法

Exist方法用于判斷數(shù)據(jù)是否存在,Get方法是以id字段舉例,那么現(xiàn)在就以name字段舉例

下面的寫(xiě)法也很怪異,猜測(cè)著去寫(xiě),很多東西都可以拓展開(kāi),剛?cè)腴T(mén),看啥都很神奇,隨便舉幾個(gè)例子,后面慢慢的去嘗試

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方法用于查詢多條數(shù)據(jù) ,F(xiàn)ind方法的第一個(gè)參數(shù)為slice的指針或Map指針,即為查詢后返回的結(jié)果,第二個(gè)參數(shù)可選,為查詢的條件struct的指針。

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

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

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

4、Join方法

第一個(gè)參數(shù)為連接類型,當(dāng)前支持INNER, LEFT OUTER, CROSS中的一個(gè)值, 第二個(gè)參數(shù)為string類型的表名,表對(duì)應(yīng)的結(jié)構(gòu)體指針或者為兩個(gè)值的[]string,表示表名和別名, 第三個(gè)參數(shù)為關(guān)聯(lián)鍵。

每個(gè)學(xué)生只在一個(gè)班級(jí)出現(xiàn),所以對(duì)應(yīng)的結(jié)構(gòu)體應(yīng)該加上x(chóng)orm的index標(biāo)記

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"`
}

如果我們想查詢出兩張表的具體數(shù)據(jù),還需要借助xorm的extend關(guān)鍵字,類似于java中的vo,而extend關(guān)鍵字的用處就是讀取的數(shù)據(jù)引用到struct,結(jié)構(gòu)體中extends標(biāo)記對(duì)應(yīng)的結(jié)構(gòu)順序應(yīng)和最終生成SQL中對(duì)應(yīng)的表出現(xiàn)的順序相同。

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

// 查詢年紀(jì)時(shí)三年紀(jì)的學(xué)生
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)

因?yàn)椴樵兊降臄?shù)據(jù)格式時(shí)數(shù)組,如果想獲取查詢出的數(shù)據(jù),可以采取循環(huán)數(shù)組的方式去遍歷

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

或者通過(guò)下標(biāo)去操作stu[0]去獲取學(xué)生的信息

5、Iterate方法

Iterate方法提供逐條執(zhí)行查詢到的記錄的方法,它所能使用的條件和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方法

統(tǒng)計(jì)數(shù)據(jù)使用Count方法,Count方法的參數(shù)為struct的指針并且成為查詢條件。

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

7、Rows方法

Rows方法和Iterate方法類似,提供逐條執(zhí)行查詢到的記錄的方法,不過(guò)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可以讓您在數(shù)據(jù)插入到數(shù)據(jù)庫(kù)時(shí)自動(dòng)將對(duì)應(yīng)的字段設(shè)置為當(dāng)前時(shí)間

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

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"`
}
// 創(chuàng)建一個(gè)結(jié)構(gòu)體
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)

刪除

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

Column屬性定義

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

xorm框架簡(jiǎn)單的使用,慢慢學(xué)習(xí),慢慢進(jìn)步,加油少年!相信自己,本文章內(nèi)容可以參考文檔 http://xorm.topgoer.com/

以上就是go xorm框架的使用的詳細(xì)內(nèi)容,更多關(guān)于go xorm框架的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • go 實(shí)現(xiàn)簡(jiǎn)易端口掃描的示例
  • 解析Go的Waitgroup和鎖的問(wèn)題
  • Go語(yǔ)言快速入門(mén)圖文教程
  • go語(yǔ)言基礎(chǔ) seek光標(biāo)位置os包的使用
  • Go語(yǔ)言獲取文件的名稱、前綴、后綴
  • Go語(yǔ)言 如何實(shí)現(xiàn)RSA加密解密
  • Go 自定義package包設(shè)置與導(dǎo)入操作
  • 詳解Gotorch多機(jī)定時(shí)任務(wù)管理系統(tǒng)

標(biāo)簽:張掖 江西 嘉峪關(guān) 延邊 新余 黑龍江 武漢 宜賓

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《go xorm框架的使用》,本文關(guān)鍵詞  xorm,框架,的,使用,xorm,框架,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《go xorm框架的使用》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于go xorm框架的使用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品久久夜| 欧美高清一级片在线| 国产视频一区在线播放| 国产一区二区不卡| 国产精品久久久久久亚洲毛片| 成人综合在线观看| 亚洲另类中文字| 欧美三级韩国三级日本三斤 | 久久精品无码一区二区三区| 国产精品1区2区3区在线观看| 国产精品网曝门| 欧美性感一类影片在线播放| 男女性色大片免费观看一区二区| 欧美成人a∨高清免费观看| 国产白丝网站精品污在线入口| 日本一区二区在线不卡| 色婷婷久久99综合精品jk白丝| 日韩精品亚洲一区| 久久精品欧美日韩| 欧美色中文字幕| 国产一区二区三区免费看| 亚洲免费毛片网站| 日韩一区二区三区观看| 成人性生交大片免费看中文 | 日韩一区二区麻豆国产| 极品少妇xxxx精品少妇偷拍| 最新国产成人在线观看| 欧美一级高清片在线观看| 成人免费视频app| 五月激情综合色| 欧美激情一区二区| 欧美日本一区二区| 成人毛片老司机大片| 天堂一区二区在线免费观看| 中文字幕不卡的av| 5858s免费视频成人| av中文一区二区三区| 精品一区二区三区在线视频| 亚洲一区二区影院| 国产欧美日本一区视频| 在线电影国产精品| 色香蕉久久蜜桃| 国产福利91精品一区| 日韩精品欧美精品| 亚洲免费av网站| 亚洲一区二区av在线| 国产亚洲综合性久久久影院| 欧美区一区二区三区| 成人avav影音| 国产在线一区观看| 三级欧美韩日大片在线看| 亚洲精品中文在线| 国产精品久久久久久久裸模| 久久色.com| 日韩三级视频在线观看| 欧美精品vⅰdeose4hd| 972aa.com艺术欧美| 成人免费高清视频在线观看| 国产乱国产乱300精品| 日韩电影免费一区| 午夜精品爽啪视频| 亚洲成人免费在线观看| 亚洲精品国产视频| 亚洲人妖av一区二区| 中文字幕日韩av资源站| 亚洲国产精品精华液2区45| 久久日韩粉嫩一区二区三区| 在线综合视频播放| 欧美日本韩国一区| 欧美日韩国产首页| 欧美精品在线一区二区三区| 欧美三级电影在线看| 欧美日本高清视频在线观看| 欧洲av一区二区嗯嗯嗯啊| 91在线码无精品| 91麻豆高清视频| 日本久久一区二区| 欧美日韩免费电影| 欧美人妖巨大在线| 欧美电影免费观看高清完整版在线观看| 欧美人动与zoxxxx乱| 日韩亚洲欧美在线| xfplay精品久久| 欧美高清在线一区| 亚洲视频在线一区观看| 亚洲精品成人悠悠色影视| 亚洲午夜一区二区三区| 日韩av一区二| 国产做a爰片久久毛片| 粉嫩av亚洲一区二区图片| 99久久亚洲一区二区三区青草| 91一区二区在线观看| 欧美性xxxxxxxx| 日韩一卡二卡三卡四卡| 亚洲精品在线三区| 国产精品久久毛片| 亚洲高清中文字幕| 精品在线免费视频| 成人免费黄色大片| 欧美三级在线视频| 久久综合丝袜日本网| 中文字幕综合网| 丝袜a∨在线一区二区三区不卡| 国内外成人在线| 91免费视频网| 日韩女优毛片在线| 中文字幕一区二区三区乱码在线 | 国产精品视频麻豆| 亚洲资源在线观看| 久久99精品一区二区三区三区| 成人免费视频一区| 在线观看成人小视频| 久久先锋影音av鲁色资源| 中文字幕亚洲一区二区av在线| 日韩成人午夜精品| www.欧美色图| 日韩精品一区二区三区三区免费| 国产精品国产三级国产aⅴ无密码| 午夜欧美在线一二页| proumb性欧美在线观看| 欧美日韩成人综合| 中日韩免费视频中文字幕| 亚洲.国产.中文慕字在线| 国产成人av电影在线播放| 7777精品伊人久久久大香线蕉 | 亚洲视频电影在线| 精品亚洲porn| 欧美视频第二页| 日韩毛片精品高清免费| 国产综合一区二区| 欧美乱妇23p| 亚洲黄色免费电影| 99久久久国产精品免费蜜臀| 精品少妇一区二区三区日产乱码| 伊人夜夜躁av伊人久久| 国产风韵犹存在线视精品| 日韩欧美国产不卡| 五月激情综合色| 欧美日韩在线播放| 亚洲欧洲制服丝袜| 国产成人午夜精品影院观看视频| 欧美一区二区三区免费观看视频| 亚洲精品菠萝久久久久久久| 粉嫩高潮美女一区二区三区 | 国产一区二区三区四区五区美女 | 久久日韩粉嫩一区二区三区| 日韩精品亚洲专区| 欧美日韩国产小视频| 亚洲一二三区视频在线观看| 91视频观看视频| 国产精品美女久久久久久久久| 国产精品一区二区在线观看不卡| 91麻豆精品国产91久久久久| 亚洲影院久久精品| 欧美私模裸体表演在线观看| 有码一区二区三区| 在线观看www91| 亚洲高清免费视频| 欧美日韩aaa| 日韩高清不卡在线| 欧美日韩国产精品成人| 亚洲国产精品天堂| 91精品一区二区三区在线观看| 日本免费新一区视频| 欧美一区二区免费视频| 美女视频黄 久久| 精品国精品国产| 国产精品 欧美精品| 国产精品网友自拍| 色综合天天综合网天天狠天天| 一区二区三区鲁丝不卡| 欧美日韩久久久一区| 久久精品国产久精国产爱| 久久综合狠狠综合久久综合88| 国产高清视频一区| 亚洲欧洲另类国产综合| 欧美在线你懂得| 免费成人在线播放| 久久夜色精品一区| 91网站在线播放| 五月天丁香久久| 精品国产乱码久久久久久久久| 国产福利91精品一区| 自拍偷拍国产亚洲| 在线精品视频小说1| 亚洲18影院在线观看| www欧美成人18+| 色系网站成人免费| 久久精品国产99国产精品| 久久久欧美精品sm网站| av在线不卡免费看| 亚洲电影视频在线| 久久精品亚洲精品国产欧美| 91久久久免费一区二区| 三级一区在线视频先锋| 国产精品欧美一区喷水| 欧美日韩高清一区二区不卡| 国产乱码精品一区二区三区忘忧草| 亚洲视频综合在线| 26uuu成人网一区二区三区|