在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    「go商城」gin+gorm實現CRUD

    gorm是什么?

    ORM-Object-Relationl Mapping,即對象關系映射,這里的Relationl指的是關系型數據庫它的作用是在關系型數據庫和對象之間作一個映射,這樣,我們在具體的操作數據庫的時候,就不需要再去和復雜的SQL語句打交道,只要像平時操作對象一樣操作它就可以了GORM就是go語言實現的一個ORM庫特點:

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

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

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

    預加載

    事務

    復合主鍵

    SQL 構造器

    自動遷移

    日志

    基于GORM回調編寫可擴展插件

    全特性測試覆蓋

    開發(fā)者友好

    GORM之簡單CRUD

    增加(Create)

    user := User{Name: “Jinzhu”, Age: 18, Birthday: time.Now()}db.NewRecord(user) // => 返回 `true` ,因為主鍵為空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;// 通過主鍵進行查詢 (僅適用于主鍵是數字類型)db.First(&user, 10)//// SELECT * FROM users WHERE id = 10;

    更新(Update)

    db.First(&user)user.Name = “jinzhu 2″user.Age = 100db.Save(&user)// 如果單個屬性被更改了,更新它db.Model(&user).Update(“name”, “hello”)//// UPDATE users SET name=’hello’, updated_at=’2013-11-17 21:34:10′ WHERE id=111;// 使用組合條件更新單個屬性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 語句添加額外選項db.Set(“gorm:delete_option”, “OPTION (OPTIMIZE FOR UNKNOWN)”).Delete(&email)//// DELETE from emails where id=10 OPTION (OPTIMIZE FOR UNKNOWN);

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

    項目中聲明全局GVA_DB

    在項目中我們定義一個全局的GVA_DB,方便使用時調用

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

    后續(xù)我們在需要查詢數據庫時便可直接通過global.GVA_DB使用比如創(chuàng)建商品信息:我們先通過查詢分類是否存在,然后再創(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(“分類數據異常”) } 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}

    通過gorm的鏈式操作可以很方便的進行crud操作

    分頁查詢

    分頁查詢是項目中經常使用到的功能,當指定條件查詢的數據量過大時,如果我們將數據一次性返回,會對數據庫造成較大的負荷,同時降低接口的性能,通常我們會使用分頁查詢的方式讓數據進行分段展示,從而保障接口的性能。在gorm中我們實用Offset,和Count來實現分頁

    Offset 指定在開始返回記錄之前要跳過的記錄數。

    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 獲取模型記錄數。注意:在查詢鏈中使用 Count 時,必須放在最后一個位置,因為它會覆蓋 SELECT 查詢條件。

    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’;

    我們通過前端的傳遞過來的分頁數據進行查詢

    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 // 如果有條件搜索 下方會自動創(chuàng)建搜索語句 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}

    總結

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

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

    相關推薦

    • 30個無加盟費的項目(茶顏悅色奶茶店加盟費多少)

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

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

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

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

      寶可夢朱紫里獒教父是一只很強的寶可夢,很多玩家不清楚獒教父的屬性是什么樣的,下面就給大家?guī)韺毧蓧糁熳祥峤谈笇傩砸挥[,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 獒教父屬性一覽…

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

      寶可夢朱紫里有很多寶可夢都是擁有夢特性會變強的寶可夢,很多玩家不知道夢特性怎么獲得,下面就給大家?guī)韺毧蓧糁熳想[藏特性獲取方法推薦,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 …

      2022年11月25日
    • 規(guī)范透明促PPP高質量發(fā)展——16萬億元大市場迎來新規(guī)

      近日,財政部印發(fā)《關于進一步推動政府和社會資本合作(PPP)規(guī)范發(fā)展、陽光運行的通知》,從做好項目前期論證、推動項目規(guī)范運作、嚴防隱性債務風險、保障項目陽光運行四個方面進一步規(guī)范P…

      2022年11月25日
    • 客服的崗位職責怎么寫(客服工作內容及職責)

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

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

      CPA渠道 CPA指的是按照指定的行為結算,可以是搜索,可以是注冊,可以是激活,可以是搜索下載激活,可以是綁卡,實名認證,可以是付費,可以是瀏覽等等。甲乙雙方可以根據自己的情況來定…

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

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

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

      如今抖音這個短視頻的變現能力越來越突顯了,尤其是在平臺上開通直播,更具有超強的帶貨屬性,已經有越來越多的普通人加入到其中了。不過直播帶貨雖然很火,但是也不是每個人都能做好的,那么在…

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

      直播帶貨無論是對于商家來說還是主播收益都是非??捎^的,所以不少平臺都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開通后帶貨鏈接怎么做?下面小編為大家?guī)硖詫氈辈ラ_通后帶…

      2022年11月24日

    聯(lián)系我們

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