亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                「go商城」gin+gorm實(shí)現(xiàn)CRUD

                gorm是什么?

                ORM-Object-Relationl Mapping,即對(duì)象關(guān)系映射,這里的Relationl指的是關(guān)系型數(shù)據(jù)庫(kù)它的作用是在關(guān)系型數(shù)據(jù)庫(kù)和對(duì)象之間作一個(gè)映射,這樣,我們?cè)诰唧w的操作數(shù)據(jù)庫(kù)的時(shí)候,就不需要再去和復(fù)雜的SQL語(yǔ)句打交道,只要像平時(shí)操作對(duì)象一樣操作它就可以了GORM就是go語(yǔ)言實(shí)現(xiàn)的一個(gè)ORM庫(kù)特點(diǎn):

                特性 ORM (幾乎包含所有特性)

                模型關(guān)聯(lián) (一對(duì)一, 一對(duì)多,一對(duì)多(反向), 多對(duì)多, 多態(tài)關(guān)聯(lián))

                鉤子 (Before/After Create/Save/Update/Delete/Find)

                預(yù)加載

                事務(wù)

                復(fù)合主鍵

                SQL 構(gòu)造器

                自動(dòng)遷移

                日志

                基于GORM回調(diào)編寫(xiě)可擴(kuò)展插件

                全特性測(cè)試覆蓋

                開(kāi)發(fā)者友好

                GORM之簡(jiǎn)單CRUD

                增加(Create)

                user := User{Name: “Jinzhu”, Age: 18, Birthday: time.Now()}db.NewRecord(user) // => 返回 `true` ,因?yàn)橹麈I為空db.Create(&user)db.NewRecord(user) // => 在 `user` 之后創(chuàng)建返回 `false`

                檢索(Retrieve)

                // 獲取第一條記錄,按主鍵排序db.First(&user)//// SELECT * FROM users ORDER BY id LIMIT 1;// 獲取一條記錄,不指定排序db.Take(&user)//// SELECT * FROM users LIMIT 1;// 獲取最后一條記錄,按主鍵排序db.Last(&user)//// SELECT * FROM users ORDER BY id DESC LIMIT 1;// 獲取所有的記錄db.Find(&users)//// SELECT * FROM users;// 通過(guò)主鍵進(jìn)行查詢(xún) (僅適用于主鍵是數(shù)字類(lèi)型)db.First(&user, 10)//// SELECT * FROM users WHERE id = 10;

                更新(Update)

                db.First(&user)user.Name = “jinzhu 2″user.Age = 100db.Save(&user)// 如果單個(gè)屬性被更改了,更新它db.Model(&user).Update(“name”, “hello”)//// UPDATE users SET name=’hello’, updated_at=’2013-11-17 21:34:10′ WHERE id=111;// 使用組合條件更新單個(gè)屬性db.Model(&user).Where(“active = ?”, true).Update(“name”, “hello”)//// UPDATE users SET name=’hello’, updated_at=’2013-11-17 21:34:10′ WHERE id=111 AND active=true;

                刪除(Delete)

                // 刪除一條存在的記錄db.Delete(&email)//// DELETE from emails where id=10;// 為刪除 SQL 語(yǔ)句添加額外選項(xiàng)db.Set(“gorm:delete_option”, “OPTION (OPTIMIZE FOR UNKNOWN)”).Delete(&email)//// DELETE from emails where id=10 OPTION (OPTIMIZE FOR UNKNOWN);

                如果模型中有 DeletedAt 字段,它將自動(dòng)擁有軟刪除的能力!當(dāng)執(zhí)行刪除操作時(shí),數(shù)據(jù)并不會(huì)永久的從數(shù)據(jù)庫(kù)中刪除,而是將 DeletedAt 的值更新為當(dāng)前時(shí)間。具體的使用可查看gorm 官方文檔

                項(xiàng)目中聲明全局GVA_DB

                在項(xiàng)目中我們定義一個(gè)全局的GVA_DB,方便使用時(shí)調(diào)用

                // global.govar ( GVA_DB *gorm.DB )

                后續(xù)我們?cè)谛枰樵?xún)數(shù)據(jù)庫(kù)時(shí)便可直接通過(guò)global.GVA_DB使用比如創(chuàng)建商品信息:我們先通過(guò)查詢(xún)分類(lèi)是否存在,然后再創(chuàng)建商品

                func (m *ManageGoodsInfoService) CreateMallGoodsInfo(req manageReq.GoodsInfoAddParam) (err error) { var goodsCategory manage.MallGoodsCategory err = global.GVA_DB.Where(“category_id=? AND is_deleted=0”, req.GoodsCategoryId).First(&goodsCategory).Error if goodsCategory.CategoryLevel != enum.LevelThree.Code() { return errors.New(“分類(lèi)數(shù)據(jù)異常”) } if !errors.Is(global.GVA_DB.Where(“goods_name=? AND goods_category_id=?”, req.GoodsName, req.GoodsCategoryId).First(&manage.MallGoodsInfo{}).Error, gorm.ErrRecordNotFound) { return errors.New(“已存在相同的商品信息”) }…… err = global.GVA_DB.Create(&goodsInfo).Error return err}

                通過(guò)gorm的鏈?zhǔn)讲僮骺梢院芊奖愕倪M(jìn)行crud操作

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

                分頁(yè)查詢(xún)是項(xiàng)目中經(jīng)常使用到的功能,當(dāng)指定條件查詢(xún)的數(shù)據(jù)量過(guò)大時(shí),如果我們將數(shù)據(jù)一次性返回,會(huì)對(duì)數(shù)據(jù)庫(kù)造成較大的負(fù)荷,同時(shí)降低接口的性能,通常我們會(huì)使用分頁(yè)查詢(xún)的方式讓數(shù)據(jù)進(jìn)行分段展示,從而保障接口的性能。在gorm中我們實(shí)用Offset,和Count來(lái)實(shí)現(xiàn)分頁(yè)

                Offset 指定在開(kāi)始返回記錄之前要跳過(guò)的記錄數(shù)。

                db.Offset(3).Find(&users)//// SELECT * FROM users OFFSET 3;// 用 -1 取消 OFFSET 限制條件db.Offset(10).Find(&users1).Offset(-1).Find(&users2)//// SELECT * FROM users OFFSET 10; (users1)//// SELECT * FROM users; (users2)

                Count 獲取模型記錄數(shù)。注意:在查詢(xún)鏈中使用 Count 時(shí),必須放在最后一個(gè)位置,因?yàn)樗鼤?huì)覆蓋 SELECT 查詢(xún)條件。

                db.Where(“name = ?”, “jinzhu”).Or(“name = ?”, “jinzhu >2”).Find(&users).Count(&count)//// SELECT * from USERS WHERE name = ‘jinzhu’ OR name = >’jinzhu 2′; (users)//// SELECT count(*) FROM users WHERE name = ‘jinzhu’ OR >name = ‘jinzhu 2’;

                我們通過(guò)前端的傳遞過(guò)來(lái)的分頁(yè)數(shù)據(jù)進(jìn)行查詢(xún)

                func (m *ManageGoodsInfoService) GetMallGoodsInfoInfoList(info manageReq.MallGoodsInfoSearch, goodsName string, goodsSellStatus string) (err error, list interface{}, total int64) { limit := info.PageSize offset := info.PageSize * (info.PageNumber – 1) // 創(chuàng)建db db := global.GVA_DB.Model(&manage.MallGoodsInfo{}) var mallGoodsInfos []manage.MallGoodsInfo // 如果有條件搜索 下方會(huì)自動(dòng)創(chuàng)建搜索語(yǔ)句 err = db.Count(&total).Error if err != nil { return } if goodsName != “” { db.Where(“goods_name =?”, goodsName) } if goodsSellStatus != “” { db.Where(“goods_sell_status =?”, goodsSellStatus) } err = db.Limit(limit).Offset(offset).Order(“goods_id desc”).Find(&mallGoodsInfos).Error return err, mallGoodsInfos, total}

                總結(jié)

                商城作為gin的學(xué)習(xí)項(xiàng)目,沒(méi)有很復(fù)雜的邏輯,所有業(yè)務(wù)邏輯均通過(guò)Mysql實(shí)現(xiàn)。包括后面將要介紹的登錄態(tài),也是如此。所有代碼已上傳github,有興趣的可以訪問(wèn)https://github.com/newbee-ltd/newbee-mall-api-go/,如果有更好的建議也歡迎提交issure,pr

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶(hù)投稿
                上一篇 2022年6月28日 17:35
                下一篇 2022年6月28日 17:35

                相關(guān)推薦

                • 30個(gè)無(wú)加盟費(fèi)的項(xiàng)目(茶顏悅色奶茶店加盟費(fèi)多少)

                  茶顏悅色又爆了,8月18日,茶顏悅色南京門(mén)店正式開(kāi)業(yè),開(kāi)張不到半小時(shí),門(mén)店就人滿為患,消費(fèi)者的購(gòu)買(mǎi)熱情十分高漲,而由于人流量過(guò)大造成擁堵,茶顏悅色也不得不暫停營(yíng)業(yè)。 當(dāng)然,這里面排…

                  2022年11月27日
                • 凈利潤(rùn)率越高越好嗎(凈利潤(rùn)率多少合適)

                  一、持續(xù)增收不增利,平均凈利潤(rùn)率首次跌入個(gè)位數(shù) 2021年,增收不增利依舊是行業(yè)主流。具體來(lái)看,大部分企業(yè)營(yíng)業(yè)收入呈增長(zhǎng)態(tài)勢(shì),E50企業(yè)平均同比增速達(dá)到17.3%,但是利潤(rùn)增速則明…

                  2022年11月26日
                • 《寶可夢(mèng)朱紫》獒教父屬性是什么?獒教父屬性一覽

                  寶可夢(mèng)朱紫里獒教父是一只很強(qiáng)的寶可夢(mèng),很多玩家不清楚獒教父的屬性是什么樣的,下面就給大家?guī)?lái)寶可夢(mèng)朱紫獒教父屬性一覽,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 獒教父屬性一覽…

                  2022年11月25日
                • 《寶可夢(mèng)朱紫》夢(mèng)特性怎么獲得?隱藏特性獲取方法推薦

                  寶可夢(mèng)朱紫里有很多寶可夢(mèng)都是擁有夢(mèng)特性會(huì)變強(qiáng)的寶可夢(mèng),很多玩家不知道夢(mèng)特性怎么獲得,下面就給大家?guī)?lái)寶可夢(mèng)朱紫隱藏特性獲取方法推薦,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 …

                  2022年11月25日
                • 規(guī)范透明促PPP高質(zhì)量發(fā)展——16萬(wàn)億元大市場(chǎng)迎來(lái)新規(guī)

                  近日,財(cái)政部印發(fā)《關(guān)于進(jìn)一步推動(dòng)政府和社會(huì)資本合作(PPP)規(guī)范發(fā)展、陽(yáng)光運(yùn)行的通知》,從做好項(xiàng)目前期論證、推動(dòng)項(xiàng)目規(guī)范運(yùn)作、嚴(yán)防隱性債務(wù)風(fēng)險(xiǎn)、保障項(xiàng)目陽(yáng)光運(yùn)行四個(gè)方面進(jìn)一步規(guī)范P…

                  2022年11月25日
                • 客服的崗位職責(zé)怎么寫(xiě)(客服工作內(nèi)容及職責(zé))

                  各位小伙伴們大家周一好,又到了每周一給大家分享干貨內(nèi)容的時(shí)候啦~ 本期來(lái)跟大家分享一下客服工作管理流程以及客服崗位里面的每項(xiàng)職能崗位的核心細(xì)則,也是干貨滿滿推薦收藏~ 一.補(bǔ)償流程…

                  2022年11月25日
                • 什么是推廣cpa一篇文章帶你看懂CPA推廣渠道

                  CPA渠道 CPA指的是按照指定的行為結(jié)算,可以是搜索,可以是注冊(cè),可以是激活,可以是搜索下載激活,可以是綁卡,實(shí)名認(rèn)證,可以是付費(fèi),可以是瀏覽等等。甲乙雙方可以根據(jù)自己的情況來(lái)定…

                  2022年11月25日
                • 推薦3種白手起家的賺錢(qián)項(xiàng)目(白手起家賺錢(qián)項(xiàng)目有哪些)

                  如今社會(huì)壓力非常的大,家有老少要養(yǎng)活,這些都加速了窮人想要?jiǎng)?chuàng)業(yè)的欲望,但是創(chuàng)業(yè)路總是那么的艱難,資金就是創(chuàng)業(yè)的重頭戲,所以選擇一個(gè)低成本又賺錢(qián)的項(xiàng)目是大多數(shù)人最期望的了,那么有哪些…

                  2022年11月25日
                • 抖音直播帶貨有哪些方法技巧(抖音直播帶貨有哪些痛點(diǎn))

                  如今抖音這個(gè)短視頻的變現(xiàn)能力越來(lái)越突顯了,尤其是在平臺(tái)上開(kāi)通直播,更具有超強(qiáng)的帶貨屬性,已經(jīng)有越來(lái)越多的普通人加入到其中了。不過(guò)直播帶貨雖然很火,但是也不是每個(gè)人都能做好的,那么在…

                  2022年11月24日
                • 淘寶直播開(kāi)通后帶貨鏈接怎么做(淘寶直播需要開(kāi)通淘寶店鋪嗎)

                  直播帶貨無(wú)論是對(duì)于商家來(lái)說(shuō)還是主播收益都是非??捎^的,所以不少平臺(tái)都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開(kāi)通后帶貨鏈接怎么做?下面小編為大家?guī)?lái)淘寶直播開(kāi)通后帶…

                  2022年11月24日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息