在寫sql語句時(shí),where的條件主要是 key=1 and key2=2 或者 key=1 or key2=2 這種形式[還有 and與or 混合]。
成都創(chuàng)新互聯(lián)從2013年創(chuàng)立,先為安龍等服務(wù)建站,安龍等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為安龍企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
認(rèn)真分析會(huì)發(fā)現(xiàn)條件有 4部分 組成-- 字段名、操作符、查詢值、與前一個(gè)條件的關(guān)系[and,or] ,這樣就很容易實(shí)現(xiàn)了。下面就是一個(gè)說明,為了簡化,其中會(huì)默認(rèn)省略一些特征。
啟動(dòng)項(xiàng)目
訪問測試地址:
帶分頁的地址:
之前寫過了Go語言gorm框架MySQL實(shí)踐,其中對gorm框架在操作MySQL的各種基礎(chǔ)實(shí)踐,下面分享一下如何使用gorm框架對MySQL直接進(jìn)行性能測試的簡單實(shí)踐。
這里我使用了一個(gè)原始的Go語言版本的 FunTester 測試框架,現(xiàn)在只有一個(gè)基本的方法,實(shí)在是因?yàn)镚o語言特性太強(qiáng)了??蚣茉O(shè)計(jì)的主要思路之一就是利用Go語言的閉包和方法參數(shù)特性,將一個(gè) func() 當(dāng)做性能測試的主題,通過不斷運(yùn)行這個(gè) func() 來實(shí)現(xiàn)性能測試。當(dāng)然還有另外一個(gè)思路就是運(yùn)行一個(gè)多線程任務(wù)類,類似 Java 版本的 com.funtester.base.constaint.ThreadBase 抽象類,這樣可以設(shè)置一些類的屬性,綁定一些測試資源,適配更多的測試場景。
下面演示select的性能測試,這里我用了隨機(jī)ID查詢的場景。
這里我使用從35開始遞增的ID進(jìn)行刪除。
這里使用了select的用例部分,隨機(jī)ID,然后更新name字段,隨機(jī)10個(gè)長度的字符串。
這里用到了 FunTester 字段都是隨機(jī)生成。
到這里可以看出,性能測試框架用到的都是gorm框架的基礎(chǔ)API使用,這里MySQL連接池的管理工作完全交給了gorm框架完成,看資料說非常牛逼,我們只需要設(shè)置幾個(gè)參數(shù)。這個(gè)使用體現(xiàn)很像 HttpClient 設(shè)置 HTTP 連接池類似,這里我們也可以看出這些優(yōu)秀的框架使用起來都是非常簡單的。
PS:關(guān)于gorm的基礎(chǔ)使用的請參考上一期的文章Go語言gorm框架MySQL實(shí)踐。
之前用 beego 中自帶的 orm,感覺有一些不是很滿足需求的地方,而且想要嘗試一些新的 orm,寫一篇記錄一下。
在 xorm 和 gorm 之間對比了一下:
p.s. 需要說明的是,對比非常初級,而且項(xiàng)目處于很早期,也抱著嘗試一下不行再改的心理,并沒有想要得到一個(gè)孰優(yōu)孰劣的結(jié)論。
想來想去,對于一個(gè)成熟的項(xiàng)目可能 gorm 更適合,但是 xorm 好像近期在頻繁 commit,有一種想要追趕的意思。
那我先試試 xorm ,不知道為什么選的這個(gè),可能是想試試看新款吧。(大霧
2017/07/04
可怕,xorm 不支持外鍵關(guān)系。一對一啥的。
gorm安裝
gorm框架是go的一個(gè)數(shù)據(jù)庫連接及交互框架,一般用于連接關(guān)系型數(shù)據(jù)庫。
安裝gorm,使用命令安裝:
go get -u -v github點(diǎn)抗 /jinzhu/gorm
連接數(shù)據(jù)庫
構(gòu)建連接的目標(biāo)為數(shù)據(jù)庫中某一個(gè)庫,同大多數(shù)框架一樣使用url進(jìn)行連接,url基本格式:
用戶名:密碼@連接方式(ip:port)/數(shù)據(jù)庫名?參數(shù)
參數(shù)描述:
用戶名 :連接數(shù)據(jù)庫用戶名
密碼 :連接數(shù)據(jù)庫密碼
連接方式 :或稱為訪問協(xié)議,一般為tcp
ip :數(shù)據(jù)庫所在服務(wù)器地址
port :數(shù)據(jù)庫監(jiān)聽端口
數(shù)據(jù)庫名 :數(shù)據(jù)庫中對應(yīng)要連接庫名
參數(shù) :附加數(shù)據(jù)庫參數(shù),根據(jù)數(shù)據(jù)庫不同內(nèi)容不同
確定url后,就可以調(diào)用gorm中參數(shù)進(jìn)行連接數(shù)據(jù)庫操作:
別忘記import語句導(dǎo)入包:
操作完數(shù)據(jù)庫后不要忘了關(guān)閉連接:
表操作
創(chuàng)建表
gorm創(chuàng)建表基于結(jié)構(gòu)體,所以創(chuàng)建表前要先用結(jié)構(gòu)體規(guī)劃表結(jié)構(gòu),這里簡單寫一個(gè)結(jié)構(gòu)體,創(chuàng)建表時(shí)默認(rèn)結(jié)構(gòu)體第一個(gè)字段作為主鍵:
寫好結(jié)構(gòu)體后,調(diào)用創(chuàng)建表語句直接按照結(jié)構(gòu)體結(jié)構(gòu)創(chuàng)建表:
當(dāng)直接創(chuàng)建表時(shí),表名遵循規(guī)范:
1、大寫字母全部小寫,所有位于中間的大寫字母都變成小寫字母并且前面加下劃線,例如UserInfo結(jié)構(gòu)體創(chuàng)建為表名稱為user_infos。
2、上面最后的那個(gè)s是因?yàn)橹苯觿?chuàng)建表時(shí),名稱最后都會(huì)加上一個(gè)s。所以上面結(jié)構(gòu)體User創(chuàng)建表后名稱為users。
刪除表
增刪改查
插入數(shù)據(jù)
插入數(shù)據(jù),插入數(shù)據(jù)方法結(jié)構(gòu)使用Create方法:
查詢數(shù)據(jù)
查詢第一條找到的數(shù)據(jù),使用First,該方法返回值仍然為db對象,所以接收數(shù)據(jù)時(shí)我們需要先定義一個(gè)對應(yīng)表結(jié)構(gòu)的結(jié)構(gòu)體接收數(shù)據(jù):
有First就有Last,同F(xiàn)irst調(diào)用格式一致。
批量查詢,批量查詢使用Find方法,其余參數(shù)結(jié)構(gòu)同F(xiàn)irst或Last相同,只不過傳參時(shí)一般傳入數(shù)組參數(shù),當(dāng)然,F(xiàn)irst或Last方法也可以傳入數(shù)組參數(shù),但得到的數(shù)組只有一個(gè)數(shù)據(jù),批量查詢操作:
更新數(shù)據(jù)
刪除內(nèi)容