纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

Gorm高级查询

3月27日 无镇楼投稿
  前言
  越高级,越复杂的查询,也同时意味着高耗,但是平时有一些数据少,但是业务复杂的场景,可以使用下。这里主要说明的是go中使用gorm进务查询。gormimport依赖databasesqlfmtgithub。comjinzhugormgithub。comjinzhugormdialectsmysql将查询结果放到一个struct中根据主键查询第一条记录db。First(user)SELECTFROMusersORDERBYidLIMIT1;随机获取一条记录db。Take(user)SELECTFROMusersLIMIT1;根据主键查询最后一条记录db。Last(user)SELECTFROMusersORDERBYidDESCLIMIT1;查询所有的记录db。Find(users)SELECTFROM查询指定的某条记录(仅当主键为整型时可用)db。First(user,10)SELECTFROMusersWHEREid10;查询条件是map或者struct查询
  有时候代码是可需要映射到一个map结构,不需要映射到一个结构体中,可以写成如下:forupdate
  在涉及并发的场景,往往需要加锁互斥,和Java类似,Go中也有加行锁的方式,加forupdate即可。
  一般写法如下:为查询SQL添加额外的SQL操作db。Set(gorm:queryoption,FORUPDATE)。First(user,10)SELECTFROMusersWHEREid10FORUPDATE;
  示例代码:err:db。Model(XXX{})。Set(gorm:queryoption,FORUPDATE)。Where(XXX?,XXX)。First(XXX)。Erroriferr!nil{iferrgorm。ErrRecordNotFound{logs。Warn(xxx)returnnil,nil}logs。Error(XXX)}Count查询
  有时候,我们需要进行简单的数据统计,比如查询到结果有多少行,varcountint64db。Model(User{})。Where(name?,jinzhu)。Or(name?,jinzhu2)。Count(count)SELECTcount()FROMusersWHEREnamejinzhuORnamejinzhu2db。Model(User{})。Where(name?,jinzhu)。Count(count)SELECTcount()FROMusersWHERE(count)分组计数
  有时候也需要分组统计行数分组计数users:〔〕User{{Name:name1},{Name:name2},{Name:name3},{Name:name3},}DB。Model(User{})。Group(name)。Count(count)count3去重统计去重计数DB。Model(User{})。Distinct(name)。Count(count)SELECTCOUNT(DISTINCT(name))FROMusersGroupHaving
  有时候我们会使用到数据统计的功能,比如根据数据库字段batchno进行分组,然后统计总金额,总笔数。
  分组查询统计一般的写法如下:db。Table(orders)。Select(date(createdat)asdate,sum(amount)astotal)。Group(date(createdat))。Having(sum(amount)?,100)。Scan(results)
  代码示例:typeSumstruct{BatchNostringgorm:column:batchnojson:batchnoTotalCountsint64gorm:column:totalcountsjson:totalcountsTotalAmountsint64gorm:column:totalamountsjson:totalamounts}varresult〔〕Sumdb:db。Model(Voucher{})。Select(batchno,count(1)astotalCounts,sum(amount)astotalAmounts)status:〔〕string{10,20,40}dbdb。Where(no?,startVoucherNo)dbdb。Where(no?,endVoucherNo)dbdb。Where(batchnoIN?,batchNos)dbdb。Where(statusIN?,status)ifshardingKey0{dbdb。Where(shardingkey,shardingKey)}dbdb。Group(batchno)err:db。Scan(result)。Erroriferr!nil{iferrgorm。ErrRecordNotFound{logs。CtxWarn(xxx)returnnil,nil}logs。CtxError(ctx,xxx,err)}Join查询
  一般来说,很少使用关联查询,但是如果要使用关联查询,可以如下:db。Table(users)。Select(users。name,emails。email)。Joins(leftjoinemailsonemails。useridusers。id)。Scan(results)多连接及参数db。Joins(JOINemailsONemails。useridusers。idANDemails。email?,jinzhuexample。org)。Joins(JOINcreditcardsONcreditcards。useridusers。id)。Where(creditcards。number?,411111111111)。Find(user)查询指定函数
  Scopes允许你指定常用的查询,可以在调用方法时引用这些查询,也就是说,可以在查询中使用函数。
  举个例子:funcAmountGreaterThan1000(dbgorm。DB)gorm。DB{returndb。Where(amount?,1000)}funcPaidWithCreditCard(dbgorm。DB)gorm。DB{returndb。Where(paymodesign?,C)}funcPaidWithCod(dbgorm。DB)gorm。DB{returndb。Where(paymodesign?,C)}db。Scopes(AmountGreaterThan1000,PaidWithCreditCard)。Find(orders)查找所有金额大于1000的信用卡订单db。Scopes(AmountGreaterThan1000,PaidWithCod)。Find(orders)查找所有金额大于1000的货到付款订单欢迎关注:程序员财富自由之路
  在这里插入图片描述参考资料https:www。cnblogs。comzisefeizhup12788060。htmlhttps:gorm。iozhCNdocsadvancedquery。htmlhttps:www。bookstack。cnreadgorm2。0docsadvancedquery。md4abzu1

瞿唐峡起个诗意的名字宋代陈谦庸蜀诸羌水,荆吴万里浑。不将崖约束,焉句壑崩奔。线引温汤浦,觞浮雪水源。槎程疑欲尽,西望气魂魂。瞿唐峡陈谦介绍……六经起个诗意的名字宋代倪龙辅四十馀万字,字字寓经纶。其用通天下,何尝语世人。壁藏终有汉,灰冷亦无秦。永永扶三极,难穷此道神。六经倪龙辅介绍……归自鸿印轩起个诗意的名字清代徐熙珍春暮池塘夕照时,峰环路转步迟迟。绿油晴泻三篙水,红杏香凝万斛脂。趁暖燕泥黏柳絮,怜芳蛛网罩花枝。兴阑归去篮舆速,刻烛联吟七字诗。……忆江南其五本意起个诗意的名字清代董俞江南好,铁瓮暮潮喧。瓜步秋风残堞隐,金焦夜雨大江寒。北固路漫漫。忆江南其五本意董俞介绍清江苏华亭人,字苍水,号樗亭。董……沪上逢几道有诗酬之起个诗意的名字清代陈宝琛桑田三变休龙斗,海上连宵重说诗。此事可怜成古调,馀生相对看枯棋。村夫食粟能无健?世路回车又有歧。岁晚卖文充市隐,水乡丹橘问归期。……春江词起个诗意的名字明代顾璘荏苒际韶景,缠绵结芳情。荡舟清江曲,云物丽波明。夹岸花齐发,间渚草新生。唼喋游鱼散,差池飞燕轻。名都胜侣集,终宴众欢并。衣香……后汉书十五首其四贾复起个诗意的名字明代郑学醇冠军披羽独先登,壮勇还能不自矜。帝莫沉吟忧击郾,天教名将佐中兴。后汉书十五首其四贾复郑学醇介绍广东顺德人,字承孟。隆庆元年……荔支辞五首选三其一起个诗意的名字清代顾印愚为客戎州啖荔支,江陵闰月熟应迟。晶盘玉手丹襦褪,最是相如解渴时。荔支辞五首选三其一顾印愚介绍顾印愚,字印伯,号所持,……府江棹歌十二首其二起个诗意的名字清代顾印愚堰根晴雪渐鳞鳞,一席乌篷恰泛春。寄语新城老司寇,未劳骑马过新津。府江棹歌十二首其二顾印愚介绍顾印愚,字印伯,号所持,……东事近感二首其一起个诗意的名字近现代胡雪抱西风鸭绿惨菰蒲,策画恢奇快剪屠。诈楚狡谋天下罪,椎秦忠愤几人无。陆沉坐盼龙蛇动,巢覆难终鴳雀娱。玉版未雕方物在,可还遥遗一箪珠……录亡女悼词书后起个诗意的名字近现代胡雪抱性妒温馨气妒清,掌珠强夺太无情。忆吟诗句肠堪断,悔用医方眼未明。痴愿竟难偿十岁,倩魂何忍索三更。平生厌洒穷途泪,蓄到今年为汝倾……食荔枝起个诗意的名字清代胡承珙秦皇汉武未闻道,海上那得如瓜枣。独有仙人冰玉肤,沐雨笼烟住瑶岛。我来海国春正中,屋角如火扶桑红。心知绝世在空谷,彷佛梦到扶荔宫。……
果然,穿大衣还是最配九分裤,显高显瘦,谁穿谁时髦相比裙子,廓型大衣配裤子会更加好看一些,市面上的裤子样式很多,从最基础的直筒裤、廓腿裤到开叉裤、豆腐裤等,每一种裤子都有其独特的优势,那么,今年冬天,穿大衣配哪一条裤子时髦洋气……建队基石沦为短板?TheShy状态引争议,12场比赛仅拿到一前言WBG战队作为LPL联赛新一届的银河战队,WBG每一场比赛都备受玩家关注,最近WBG战队就接连战胜了三场BO5(OMG,EDG二队,新一届的德杯冠军BLG),拿到了战……姚明的技术,放在现在会是啥样水平?奥胖碾压现在所有四五号位姚明可以说在NBA是非常可惜的,2002年入选状元,但是只效力了短短8个赛季,那么问题来了,以姚明的技术,放在现在的小球时代打球会是啥样的呢?对于这个问题,奥尼尔给出了自己的一……如何解决LineageW网络不稳定网络连接失败的情况LineageW是一款非常经典好玩的国际服版本传奇手游。为了世界,世袭W汇集了历时24年的Lineage系列的一切的真正Lineage全球规模的MMORPG,世界各……儿童得了甲流该怎么办呢?春季是传染病的多发季节,继新冠之后,甲流又成了另一种最严重的传染病,尤其是儿童,儿童得了甲流,会出现一系列症状。那么,甲流是怎么传染的呢?甲流盛行甲流是因为感染了A……百岁望远镜重焕新生!上海天文博物馆试开放老上海们最熟悉的地标中一定有这座位于佘山之巅的上海天文博物馆!历经两年的大规模修缮,焕然一新的它已向社会试开放,即日起,游客可通过上海天文博物馆服务微信公众号购票预约。镇台之宝……可穿戴巨头Whoop降低会员费,订阅制还是只下金蛋的鸡吗?丨健身订阅服务再起风波编辑蒲永即氪健身,持续关注一切运动健身相关的最新品牌动态及内容资讯,见证运动休闲行业的时代发展。后台回复健身添加编辑微信,或邮件wangli0136k……比亚迪乘用车逐鹿日本本报记者黄琳赵毅深圳报道随着一台蓝色的比亚迪ATTO3亮相比亚迪日本横滨店内,比亚迪乘用车于2023年正式在日本开启销售。这也是中国车企首次面向日本大众市场销售纯电动汽车……国资地产入主家居龙头股引发大涨,这波收购见效快,中泰资管姜诚财联社1月10日讯(记者封其娟)自政策边际放松以来,房地产成为资本市场颇为活跃的板块,除两次史诗级暴涨,地产股的对外收购同样引发市场波动。在地产免税的想象空间下,重启全资收购珠……韩庚娇妻真不会穿,梨形身材穿阔腿裤腿好短,搭老头衫显肚腩穿搭也讲究对症下药,并不是所有人的身材都是趋近于完美,所以就出现了多种类型的身材。梨形身材便是其中之一,只是上半身相对较为纤细,但是下半身胯宽腿粗。对于这种身材的女性,想要穿出……新妈妈应该如何给宝宝穿衣服?给宝宝穿衣服是平日里最稀松平常的事儿了,可是如果穿衣的对象是刚出生不久的宝宝,妈妈就要花些心思了。小宝宝全身都软软的,让人无从下手,如果掌握不好力度,很容易伤到宝宝。那么,妈妈……关于安卓平板你想知道的都在这里关于安卓平板你想知道的都在这里(转自酷安)畅聊数码新品御坂初琴小号平板还能这么玩写一个简单的QA贴,总结一下大家对于安卓平板的问题以及答案。先叠甲。用过……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形