• 测试环境部署之填坑记录-Expected one result (or null) to be returned by selectOne(), but found: 2


    最近在部署性能测试环境的时候,环境 部署好以后,部分功能出现接口查询异常,问题现象:

    拿到错误,肯定要先判断是前端还是后端代码的问题,最简单的方式是抓包查看:

    以上是报错页面捕获的接口报错,很明显的接口已经报错了,那么就直接查看后端的日志:

    查看日志分两步:

    1.查看网关web端的日志:

    从日志可以知道,出错的地方在selectOrgDetail接口查询上

    com.xxx.postlend.debtmanagement.service.org.impl.OrgServiceImpl.selectOrgDetail(OrgServiceImpl.java:42)

    2.继续查看APP服务端的日志报错:

    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException:

    nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2

    你想查询一条数据,但是从数据库返回两条数据

    看到这个错误,就知道是查询数据库的记录,查询到2条,而期望的结果是1条,即selectOne函数的查询结果,导致报错

    到这个错误的原因就是因为你的查询方法中得到两个两个结果集,然而你的返回用了一个实体去接收,程序这个时候就不知道如何去分配了,很果断的报这个错,

    修改方法为使用一个list来接收就没有问题了。

    其实从这个selectOne方法也可以猜出来

    期望selectOne()返回一个结果(或null),但找到:2

    然后我就看了下dao层的接口 是Office getOffice(id); 查的是一条数据,可结果返回的是2条数据的结果集。当然报错咯!

    解决方法是将接口改为list

    List<Office>getOffice(String id);

    mybatis和spring整合后,dao中的接口
    public Student getUser(Student userStudent);

    会自动选择selectOne()方法,由于只能返回一个对象的结果,当返回到多个对象的结果集时报错。getUser是一个student类的bean无法接受多个结果集,则改用List就可以接受多个结果集

    将dao中的
    public Student getUser(Student userStudent);

    改为
    import java.util.List;
    public List<Student> getUser(Student userStudent);

    从日志报错的信息查看,问题出现在APP端的代码如下:

    at com.xxx.postlend.debtoauth2.service.biz.impl.OrganizationServiceImpl.selectOrgDetailInfo(OrganizationServiceImpl.java:217)

    通过代码查看,这个selectOne查询方式是mybatis框架的自动生成sql查询语句,所以无法查看具体的sql mapper映射文件

    需要通过监控,这个接口执行的所有sql如下:

    拿到上述的sql去mysql客户端工具里执行验证一下,查看是否存在主键查询出现两条记录的sql

    果然发现存在2个orgId导致的报错,删除两个记录中的一个

    问题完美解决

    通过这个例子,其实大家在测试过程中肯定会遇见各种各样的环境问题,当出现问题的时候,首先判断问题的类型

    然后通过web端还是app端的问题,通过日志打印的堆栈,以及查看代码的方式,寻找问题的出现的原因,这样才能慢慢的提升

  • 相关阅读:
    栈——有效括号问题
    链表——判断是否有环,如果有,找到入口节点并返回(转自leetcode,个人留存)
    链表—判断是否有环
    链表—判断是否有环
    链表成对反转
    反转链表
    __attribute__机制
    linux write()
    错题本本-20180919
    C++ 11特性
  • 原文地址:https://www.cnblogs.com/qmfsun/p/11580486.html
Copyright © 2020-2023  润新知