程序报错: nested exception is org.apache.ibatis.exceptions.TooManyResultsException:Expected one result

当使用Postman调用接口时遇到了org.apache.ibatis.exceptions.TooManyResultsException,原因是SQL查询返回了5条结果,而代码期望只有一条。解决方案包括在SQL中添加限制条件以确保单个结果,使用`LIMIT`关键字限制返回数量,或者修改代码以接收一个列表。
摘要由CSDN通过智能技术生成

错误复现 :

postman调接口的时候出现了这样的错误:

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

 错误是:预期返回一个结果(或 null),但发现:5

发现这样的错误先检查sql,看sql的输出结果,sql如下:

<select id="fileInspectionList" resultType="map">
		SELECT <include refid="aip_n_static_cols"/>
		FROM sys_inspection_form  WHERE
		<if test=" type == 'admin'.toString() ">
			dept_id = #{deptid}
		</if>
		<if test=" type != 'admin'.toString() ">
			dept_id = #{deptid}
			AND status='已发布'
			or user_id = #{userid}
		</if>
	</select>

执行sql语句可以发现查询出来的对应数据有5条

报错原因:

报错的原因是因为我们的sql语句查询出多条返回结果,但是我们的代码中只需要一条返回结果,所以导致这个问题出现

解决方法

1.方法一:

在我们的sql语句中添加查询条件使得我们的返回数据为一条结果并返回

2.方法二:

返回值还是为一个对象时,将返回的数量做限制(limit)【慎用】

3.方法三:

将我们返回的数据结果用一个集合(List)来接收

### 回答1: 请求处理失败;嵌套异常是org.mybatis.spring.MyBatisSystemException:嵌套异常是org.apache.ibatis.exceptions.TooManyResultsException:期望selectOne()返回一个结果(或null),但发现:2个。 ### 回答2: 该异常信息表示在使用MyBatis框架进行数据访问时,执行了查询语句selectOne(),但是查询结果返回了2个及以上的记录,而该方法只能返回1个结果或者null,因此出现了“预期结果为1个或null,但实际找到了两个”的异常。 造成这种异常的原因可能有多种,例如查询条件不够严格或者数据被重复插入等。解决这种异常需要从以下几个方面入手: 第一步,检查查询条件是否严格,确定查询结果只返回1个或null。可以使用where子句或者limit等关键字来限制结果数量。例如: selectOne("select * from user where name = ? limit 1", "张三"); 这样就可以限制结果数量为1个。 第二步,检查数据库中数据是否存在重复插入的情况。如果是,需要删除重复数据或者修改表结构以避免数据重复插入。例如: 修改表结构,在字段上设置唯一性约束: alter table user add unique(name); 删除重复数据: delete from user where id not in (select min(id) from user group by name); 第三步,检查程序代码逻辑是否有误。这种异常有可能是我们在程序中查询时写错了sql语句或者查询条件。可以将程序中的sql和参数打印出来,检查代码逻辑是否正确。 总之,对于这种异常,我们需要仔细分析原因,找出问题所在,才能够有效地解决问题。 ### 回答3: 这个错误信息是在使用MyBatis框架查询数据库时出现的。错误信息的具体意思是,MyBatis在执行查询时预期返回一个结果(或null),但实际上返回了两个结果。所以,MyBatis无法处理这个结果,最终导致了操作失败。 这个错误通常出现在使用selectOne()方法时,因为这个方法只能返回一条结果。如果查询返回多条结果,则会引发此异常。 要解决这个问题,我们可以尝试以下几种方法: 1. 检查SQL语句:首先,我们应该检查SQL语句是否正确。可能查询的条件不够准确,或者SQL语句中存在问题,导致查询返回多条结果。如果SQL语句没有问题,我们可以尝试使用限制语句(例如“limit 1”)来确保只返回一条结果。 2. 使用selectList()方法:如果我们确定查询会返回多条结果,我们可以考虑改用selectList()方法。这个方法可以返回一个List对象,其中包含多个结果。我们可以在代码中对这个List进行操作,例如取第一个结果或者对所有结果进行遍历。 3. 修改Mapper文件:如果以上方法都无法解决问题,我们可以尝试修改Mapper文件。在Mapper文件中,我们可以使用resultMap来定义返回结果的结构,或者使用selectByExample等其他方法来进行查询。 总之,这个错误信息通常是由查询返回多条结果导致的。我们可以通过检查SQL语句、使用selectList()方法或修改Mapper文件来解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值