一:概述

在利用Service实现对数据库的操作获取内容时,虽然返回了内容,但是后面还是出现了错误。在下面将会仔细说明这个问题和解决问题。

二:具体说明

<1>问题详细代码

package org.example.space3v.yonghengyu.stack.test;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.example.space3v.yonghengyu.stack.pojo.User;
import org.example.space3v.yonghengyu.stack.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

//import java.util.List;

//import static net.sf.jsqlparser.util.validation.metadata.NamedObject.user;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceTest {

         @Autowired
         private UserService userService;

         @Test
         public void selectOne() {
             LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>();
             wrapper.gt(User::getAge,28);



             User user = userService.getOne(wrapper);
             System.out.println(user);

<2>问题的详细说明和具体解释

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

	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:440)
	at jdk.proxy2/jdk.proxy2.$Proxy56.selectOne(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:159)
	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:90)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
	at jdk.proxy2/jdk.proxy2.$Proxy58.selectOne(Unknown Source)
	at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.getOne(ServiceImpl.java:201)
	at com.baomidou.mybatisplus.extension.service.IService.getOne(IService.java:229)
	at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)
	at org.example.space3v.yonghengyu.stack.service.impl.UserServiceImpl$$EnhancerBySpringCGLIB$$ec12d20d.getOne(<generated>)
	at org.example.space3v.yonghengyu.stack.test.ServiceTest.selectOne(ServiceTest.java:31)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
	at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
Caused by: org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 6
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:80)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:578)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)
	... 44 more

使用Service实现从数据库操作获取相关内容报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.i_java

下面是对这个问题的详细说明以及解决方案。

根据错误信息,代码在执行 userService.getOne(wrapper) 方法时出现了异常。异常消息是 org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 6

这个异常表示在执行 selectOne() 查询时,期望返回一个结果或者 null,但实际上返回了 6 个结果。这可能是由于查询条件不准确或数据库中存在多个符合条件的记录导致的。

可以检查一下查询条件是否正确,确保它只返回一个结果。你可以在数据库中手动执行相同的查询语句,看看是否返回了多个结果。

如果你期望返回多个结果,可以考虑使用 List<User> userList = userService.list(wrapper) 方法来获取所有符合条件的结果列表。

要解决这个问题,可以考虑以下几种方法:

  1. 检查查询条件:确保你的查询条件是准确的,并且只会返回一个结果。你可以在数据库中手动执行相同的查询语句,确认是否返回了多个结果。
  2. 使用 List 方法:如果你期望返回多个结果,可以使用 List<User> userList = userService.list(wrapper) 方法来获取所有符合条件的结果列表。
  3. 调整查询逻辑:如果你只需要获取单个结果,但数据库中存在多个符合条件的记录,你需要调整查询逻辑,以确保只返回一个结果。你可以通过添加更多的查询条件来缩小结果集,或者使用其他查询方法来满足你的需求。
  4. 检查数据一致性:如果你确定查询条件正确,并且期望返回的结果只有一个,但仍然收到多个结果的错误,可能是数据不一致导致的。你可以检查数据库中的数据,并确保数据的一致性和完整性。

<3>问题的解决

 造成我这个问题的原因是因为,返回了多个结果导致的。利用List方法修改代码,修改后的代码如下。

 

package org.example.space3v.yonghengyu.stack.test;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.example.space3v.yonghengyu.stack.pojo.User;
import org.example.space3v.yonghengyu.stack.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

//import java.util.List;

//import static net.sf.jsqlparser.util.validation.metadata.NamedObject.user;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ServiceTest {

         @Autowired
         private UserService userService;

         @Test
         public void selectOne() {
             LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>();
             wrapper.gt(User::getAge,28);
             
             List<User> userList = userService.list(wrapper);
             userList.forEach(System.out::println);

修改之后,运行发现错误解决了,没有报错了。

使用Service实现从数据库操作获取相关内容报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.i_List_02