当前使用版本(必填,否则不予处理)

3.3.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

Wrapper<UploadSession> condwrap = Wrappers.<UploadSession>lambdaQuery().select(UploadSession::getUuid, UploadSession::getBlockId)
                .eq(UploadSession::getStatus, EStatus.PROGRESS)
                .eq(UploadSession::getContentAnalyze, EContentAnalyze.NOT);

            List<UploadSession> list1 = uploadSessionMapper.selectList(condwrap);

selectList能够得到正确的resultset, 但不能映射给相应的实体

重现步骤(如果有就写完整)

我用micronaut, 因此是手动做的依赖注入:

@Slf4j
@Factory
public class MybatisPlusFactory {

    @Value("${mybatis-plus.mapperPackage:tech.zxcloud.service.ufs.mybatis.mapper}")
    String mapperPackage;

    @Value("${mybatis-plus.mapperLocation:`classpath:mapper/**/*.xml`}")
    String xmlMapperLocation;



    @EachBean(MybatisSqlSessionFactoryBean.class)
    SqlSessionFactory initSqlSessionFactory(MybatisSqlSessionFactoryBean factoryBean) throws Exception {
        return factoryBean.getObject();
    }

    @EachBean(DataSource.class)
    MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean(DataSource ds) throws Exception {
        MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
        factoryBean.setTypeEnumsPackage("tech.zxcloud.service.ufs.mybatis.enums");
        factoryBean.setTypeHandlersPackage("tech.zxcloud.service.ufs.mybatis.handler");

        Resource[] res = ResourcePatternUtils.getResourcePatternResolver(null).getResources(xmlMapperLocation);
        factoryBean.setMapperLocations(res);
        factoryBean.setDataSource(ds);

        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.addMappers(mapperPackage);
        configuration.setLogImpl(StdOutImpl.class);

        factoryBean.setConfiguration(configuration);


        factoryBean.afterPropertiesSet();
        return factoryBean;
    }
}

在测试用例中进行的测试

@Test
    void mapper3() {
        try(SqlSession session = sessionFactory.openSession()) {
            UploadSessionMapper uploadSessionMapper = session.getMapper(UploadSessionMapper.class);

            Wrapper<UploadSession> condwrap = Wrappers.<UploadSession>lambdaQuery().select(UploadSession::getUuid, UploadSession::getBlockId)
                .eq(UploadSession::getStatus, EStatus.PROGRESS)
                .eq(UploadSession::getContentAnalyze, EContentAnalyze.NOT);

            List<Map<String,Object>> list2 = uploadSessionMapper.selectMaps(condwrap);
            log.info("list2:{}", list2);
            List<UploadSession> list1 = uploadSessionMapper.selectList(condwrap);
            log.info("list1:{}", list1);
        }
    }

调用selectMaps得到list2是可以拿到正确的结果的, 测试环境只有两条信息

报错信息

报错之前的调试信息

17:20:52.631 [main] DEBUG t.z.s.u.m.m.U.selectMaps - ==>  Preparing: SELECT uuid,block_id FROM upload_session WHERE (status = ? AND content_analyze = ?) 
17:20:52.650 [main] DEBUG t.z.s.u.m.m.U.selectMaps - ==> Parameters: PROGRESS(String), 0(Integer)
17:20:52.664 [main] TRACE t.z.s.u.m.m.U.selectMaps - <==    Columns: uuid, block_id
17:20:52.664 [main] TRACE t.z.s.u.m.m.U.selectMaps - <==        Row: 15be899c-e748-422a-bb68-cc86ddc9b706, 6688819309021499392
17:20:52.666 [main] TRACE t.z.s.u.m.m.U.selectMaps - <==        Row: 2d78e5e1-2646-471c-840f-97a9e5cf63ce, 6688973891185938432
17:20:52.667 [main] DEBUG t.z.s.u.m.m.U.selectMaps - <==      Total: 2
17:20:52.671 [main] INFO  tech.zxcloud.BioimageServiceTest - list2:[{uuid=15be899c-e748-422a-bb68-cc86ddc9b706, block_id=6688819309021499392}, {uuid=2d78e5e1-2646-471c-840f-97a9e5cf63ce, block_id=6688973891185938432}]
17:20:52.672 [main] DEBUG t.z.s.u.m.m.U.selectList - ==>  Preparing: SELECT uuid,block_id FROM upload_session WHERE (status = ? AND content_analyze = ?) 
17:20:52.672 [main] DEBUG t.z.s.u.m.m.U.selectList - ==> Parameters: PROGRESS(String), 0(Integer)
17:20:52.673 [main] TRACE t.z.s.u.m.m.U.selectList - <==    Columns: uuid, block_id
17:20:52.674 [main] TRACE t.z.s.u.m.m.U.selectList - <==        Row: 15be899c-e748-422a-bb68-cc86ddc9b706, 6688819309021499392
org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
### The error may exist in tech/zxcloud/service/ufs/mybatis/mapper/UploadSessionMapper.java (best guess)
### The error may involve tech.zxcloud.service.ufs.mybatis.mapper.UploadSessionMapper.selectList
### The error occurred while handling results
### SQL: SELECT   uuid,block_id   FROM upload_session     WHERE (status = ? AND content_analyze = ?)
### Cause: java.lang.IndexOutOfBoundsException: Index: 2, Size: 2

    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
    at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:177)
    at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:78)
    at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:96)
    at com.sun.proxy.$Proxy37.selectList(Unknown Source)
    at tech.zxcloud.BioimageServiceTest.mapper3(BioimageServiceTest.java:74)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:686)
    at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
    at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
    at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
    at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
    at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
    at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
    at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
    at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
    at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
    at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
    at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
    at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
    at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:212)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:208)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:137)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:71)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
    at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
    at java.util.ArrayList.forEach(ArrayList.java:1257)
    at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
    at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
    at java.util.ArrayList.forEach(ArrayList.java:1257)
    at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
    at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
    at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248)
    at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211)
    at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132)
    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    at java.util.ArrayList.rangeCheck(ArrayList.java:657)
    at java.util.ArrayList.get(ArrayList.java:433)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createUsingConstructor(DefaultResultSetHandler.java:669)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createByConstructorSignature(DefaultResultSetHandler.java:654)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createResultObject(DefaultResultSetHandler.java:618)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createResultObject(DefaultResultSetHandler.java:591)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:397)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:354)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:328)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:301)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:194)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65)
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
    at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:67)
    at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
    at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
    at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:163)
    at com.baomidou.mybatisplus.core.executor.MybatisCachingExecutor.query(MybatisCachingExecutor.java:90)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
    ... 69 more

Comment From: miemieYaho

你entity有无参构造吗?

Comment From: TudoRex

你entity有无参构造吗?

@Data
@Builder
@TableName("upload_session")
public class UploadSession {
    @TableId
    UUID uuid;

    Long blockId;

    String name;

    Long size;

    String type;

    Long lastModified;

    LocalDateTime statusUpdateAt;

    EStatus status;

    EContentAnalyze contentAnalyze;
}

我是按官网教程配的entity

Comment From: TudoRex

重新测试了下, 确实是Entity注解的问题, 去掉@Builder后可以了