范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

记一次MyBatisPlus中SelectOne踩坑一个数据查询结果集不符的问题

  一、背景
  今天一个线上问题报错如下:
  org.apache.ibatis.exceptions.TooManyResultsException:
  Expected one result (or null) to be returned by selectOne(), but found: 2
  通过报错信息可以知道这个是一个数据查询结果集不符的问题,程序中预期是只有一条数据的,但是查出来的结果有多个。
  二、问题排查
  ① 先看数据:提取出来SQL语句执行发现真的是有2条符合记录
  ② 那就是SQL语句的编写有问题,定位SQL语句产生的那一行代码
  ③ 发现使用了MyBatisPlus的LambdaQuery()查询中的one()方法
  PS: 这里贴一下出错的代码行
  BHOrderCargoSizeEntity splitCargoSize =
  bhOrderCargoSizeService.lambdaQuery().eq(BHOrderCargoSizeEntity::getSplitId,x.getId()).one();
  三、问题深究3.1、selectOne()第一印象
  可能对于多数人one()方法给人的第一印象是:取查询结果的其中一个然后返回3.2、真正的selectOne()
  既然都已经产生的错误那selectOne()的实际操作肯定不是和上面的想的一样的。我们点进去MP的源码可以看到如下:
  ① 先点击去One()方法可以看到如下:            // 这里是MyBatisPlus源码         /**          * 获取单个          *          * @return 单个          */         default T one() {             return getBaseMapper().selectOne(getWrapper());         }
  Java
  ② 这里可以看到是调用了selectOne()方法,同样我们在使用条件构造器进行查询时:         // 日常项目中构造器查询代码示例          @Override          public UserEntity queryByMobile(String mobile) { 	     return baseMapper.selectOne(new QueryWrapper().eq("mobile", mobile)); 	  }
  Java
  其中的selectOne()操作也是单条数据查询的。
  于是我们找到如下部分代码:         // 这里是MyBatisPlus源码          @Override          public T getOne(Wrapper queryWrapper, boolean throwEx) {              if (throwEx) {                 return baseMapper.selectOne(queryWrapper);              }              return SqlHelper.getObject(baseMapper.selectList(queryWrapper));          }
  我们可以发现:
  。有异常抛给上层处理
  。正常情况下getOne()的操作是selectList()实现的
  ③ 当有多条数据时就有了如下的情况:            // 这里是MyBatisPlus源码             /**              * 

* 从list中取第一条数据返回对应List中泛型的单个结果 * * * @param list * @param * @return */ public static E getObject(List list) { if (CollectionUtils.isNotEmpty(list)) { int size = list.size(); if (size > 1) { logger.warn(String.format("Warn: execute Method There are %s results.", size)); } return list.get(0); } return null; }   ④ 通过上述表明:   。当只有一条数据返回时程序才能正常执行   。当数据返回多条时就会给出异常提示了   四、问题解决   ① 直接使用MyBatisPlus的last方法在sql末尾追加语句"limit 1",代码如下:   BHOrderCargoSizeEntity splitCargoSize =   bhOrderCargoSizeService.lambdaQuery().eq(BHOrderCargoSizeEntity::getSplitId,x.getId()).last("limit 1") .one();   ② 网上有一些重写selectOne方法的,基本通过重写或切面编程。有兴趣可以了解下(不建议新手这样操作! )   PS:关于MyBatisPlus的语法知识点也可以参考我之前的文章:   初见MyBatisPlus   五、后记   遇到问题只知道怎么解决是不够的,能追其本质才是乐趣所在。


专访苹果全球副总裁想象未来在哪,而不是等待未来发生每隔一段时间,就会有个革命性的产品出现,然后改变一切。人一生能参与一件这样的产品就已经非常幸运了。乔布斯口中的革命性产品,BobBorchers幸运地见证和参与了两个。作为苹果全球TCLS12金标剧院电视,用好声音开启客厅观影新体验时光荏苒,虎年春节即将来临,近些年的春节,不能天南海北的去旅行了,电视又重新变成了家里的香饽饽,想在春节前更新一波电视的小伙伴有福了。家电行业巨头TCL在虎年春节来临之际,推出了S银行不喜欢支付宝,为什么支付宝还可以从银行的卡上转钱?大家好!我是空谷寒潭。银行虽然不喜欢支付宝,但是它要遵守国家法律和支付结算制度。首先,存取款自由是储蓄管理条例赋予银行卡持有人的权利,银行不得拒绝。从个人支付宝转账到个人银行卡,是三星S22能否重新回归高端市场,或许价格香了有可能伴随着2022年的到来,各家的新机都有着不错的表现,而三星作为安卓市场的高端机王者,今年的第一款新机也一直吸引着大家的注意。根据目前已经传出的信息来看,三星今年的新机将会被命名为三数字经济推动治理新机制要加强数字经济程序和制度安排,确保多元主体的共同行动能力,首要的就是完善数字经济法治环境。通过法治建设,维持公平的市场竞争秩序,维护各个主体的合法权益,严厉打击各种数字经济违法和侵道德经76我的应用外必须柔,内必须刚我偏柔老大偏刚我做事比较慢,以周为行动单位老大做事超级快,秒速行动。我看上他的快,他接受我的慢。工作上大家彼此互补,很好很好。但是生活上,柔和刚还是有区别的阿里动作刚,凡事儿以拯救美政府推出新政策以吸引科技等领域国际学生为了提高美国经济竞争力,美国政府1月21日推出新政策,以吸引专攻科学技术工程和数学专业(STEM)的国际学生。根据美国联邦公报的通知,美国国务院将允许符合条件的科学技术工程和数学(中国移动大方了10年不换号能享受4个特权服务!望周知导读中国移动大方了10年不换号能享受4个特权服务!望周知!中国移动是我国第一大移动电信网络运营商,经过这么多年时间的发展,中国移动在国内市场上的累计用户已经超过了9。41亿,在庞大利出一孔,力才出一孔力出一孔,利出一孔,出自任正非2013年华为新年献词。如果我们能坚持力出一孔,利出一孔,下一个倒下的就不会是华为如果我们放弃了力出一孔,利出一孔的原则,下一个倒下的也许可能就是华为长盈精密预计2021年全年归属净利润亏损4。90亿元至6。90亿元,同比上年下降181。65至214。97长盈精密20220124发布业绩预告,预计2021年全年归属净利润亏损4。90亿元至6。90亿元,同比上年下降181。65至214。97。本次业绩变动的原因为1主要客户战略产品研发润建股份(002929。SZ)拟向参股公司旗鱼科技增资不超2040万元智通财经APP讯,润建股份(002929。SZ)发布公告,为进一步加速公司及参股公司旗鱼科技业务拓展,结合旗鱼科技融资需求,公司拟以自有资金不超过2040万元向旗鱼科技增资,取得旗
纠结了很久的小程序微商城,好处原来这么多新一轮技术变革及其应用在全球范围内迅速孕育兴起,推动着服装行业向数字化智能化转型。秦丝科技为中国超过200万批零商户提供了完善的解决方案,引领着行业发展,助力万千服装实体商户转型。惨!沙河一服装老板请网红直播带货,3天亏了12万新一轮技术变革及其应用在全球范围内迅速孕育兴起,推动着服装行业向数字化智能化转型。秦丝科技为中国超过200万批零商户提供了完善的解决方案,引领着行业发展,助力万千服装实体商户转型。为什么唐僧四人能取经成功?所有人都该看看新一轮技术变革及其应用在全球范围内迅速孕育兴起,推动着服装行业向数字化智能化转型。秦丝科技为中国超过200万批零商户提供了完善的解决方案,引领着行业发展,助力万千服装实体商户转型。耐克再爆丑闻,店员歧视农民工,网友都是打工的,何必呢新疆棉花事件,耐克先是站HM,后来又改口说耐克属于中国,遭到网友的讽刺这不,最近耐克又爆出丑闻,店员歧视农民工一家五口,引发全网热议。我们来看看怎么回事。01带孩子买衣服,却遭店员25年前出走国企,白手起家,他立志做中国的奥利奥坐拥金饭碗,他却一手打翻,起步仅靠一人一单车,如何在武汉批发市场闯出一片天?声元副食,拥有两家门店,其中一门店位于武汉市汉口北批发市场,线下客户几千人,线上客户上千人。从业25年的瓶颈期怎么做?如何提高品牌曝光?这些问题终于有答案了9月6日,秦丝科技7周年全国巡回研讨会,第三站来到了素有琴岛之称的青岛,至此,全国巡回研讨会进行到中程。青岛合影青岛站主要围绕电商冲击,价格透明,实体店该如何寻求新转机?如何提高品未来5年,将是国产运动品牌的爆发期生意好的一般是两种情形,一是选对了赛道二是创新。你属于哪类?如果我说,未来5年,将是国产运动品牌的爆发期,你相信吗?不信没关系,我是有根据的。国人文化自信的逐渐外化几年前,国潮就悄在国内被污名化,产量却达全球第一,年出口70亿,80被欧美消费现如今,在健康饮食观念下,无糖概念正席卷全国。无论现在爆火的网红奶茶,还是可乐雪碧,都推出了0脂肪和0糖的品类,试图取得那些减肥人士和糖尿病人士的青睐。但是有意思的是,虽然这些产品又一国产电动车黑马崛起!不是雅迪爱玛,却被40家大品牌连番抄袭在迈入21世纪后,伴随着群众经济水准不断地增高,都市家庭对于私家车的需求量逐渐递增,目前我国机动车保有量已高达2。7亿辆,但也造成了城市交通拥堵的问题。因此,摩托车和电动车依然有着又一312亿女巨骗神秘失踪!传销达到67000层级,中国受害者占70谁也没想到,一个东欧小国保加利亚的中年妇女,自称加密币女王,声称不到两年之内就取代了比特币称霸币圈,结果3年全球狂揽40亿欧元,折合人民币312亿元,在中国涉案金额150亿元,然而被超市按30斤卖,收购价却是1元,我国产量全球第一,出口仅占2这两年,我国坚果市场一路飞涨,洽洽食品三只松鼠百草味良品铺子可以说合力制造出了一个坚果的零食市场,很多年轻人都会购买坚果零食放在办公室或者家里,因为在他们看来,坚果是营养食品,而且