Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mybatis没有返回延迟获取上的所有行_Java_Mybatis_Ibatis - Fatal编程技术网

Java mybatis没有返回延迟获取上的所有行

Java mybatis没有返回延迟获取上的所有行,java,mybatis,ibatis,Java,Mybatis,Ibatis,使用mybatis(3.4.4)查询oracle后端时,我的java应用程序在使用延迟加载时没有返回所有行 本质上 当我使用一些SQL工具(如oracle SQL Developer)查询数据库时,我得到了4000个结果 当我使用selectCursor进行查询时,这会导致延迟加载conn.selectCusror(查询)我只得到560个结果 当我使用selectList进行查询时,它将一次获取所有结果conn.selectList(查询)我将获得4000个结果(与数据库匹配) 注意:游标提

使用mybatis(3.4.4)查询oracle后端时,我的java应用程序在使用延迟加载时没有返回所有行

本质上

  • 当我使用一些SQL工具(如oracle SQL Developer)查询数据库时,我得到了4000个结果

  • 当我使用selectCursor进行查询时,这会导致延迟加载
    conn.selectCusror(查询)
    我只得到560个结果

  • 当我使用selectList进行查询时,它将一次获取所有结果
    conn.selectList(查询)
    我将获得4000个结果(与数据库匹配)

注意:游标提供与列表相同的结果,只是它使用迭代器惰性地获取数据

这就是我计算记录数的方法

Cursor<Object> cur = conn.selectCursor(query) ; // query definition is written below
int count =0;
for(Object ob : cur){
    count++;
}
System.out.println(count);
cursorcur=conn.selectCursor(查询);//查询定义写在下面
整数计数=0;
for(对象对象对象:cur){
计数++;
}
系统输出打印项次(计数);
查询

<select id="query" fetchSize="20000" resultType="java.util.Map" >
    select distinct code from my CODES_VIEW
</select>

从“我的代码”视图中选择不同的代码

有人能告诉我为什么selectCursor在我找到这个解决方案的几天后没有给出全部4000个结果吗

查询的结果集包含一行(561),该行的列中有空值。这应该不是问题,因为我获取的列中可能有空值。在这种情况下,
code
列在第561行具有值
null
。 当通过
selectCursor
(获取数据的惰性方法)获取记录时,mybatis认为,当获取行中的所有列都为空时,记录结束

默认情况下,MyBatis的所有列都返回null 行为空。启用此设置后,MyBatis将返回空值 实例。请注意,它也适用于嵌套结果(即。 收集和关联)。自:3.4.2

但是,当您使用
selectList
时,您不会遇到这个问题,因为所有记录都是一次提取的,而且cursor不会一直检查下一次提取的记录是什么样子的

因此,解决方案是将以下设置放在mybatis config.xml中

<setting name="returnInstanceForEmptyRow" value="true" />


我不确定发生了什么事。如果你能提供一个像这样的小项目,演示
selectList()
selectCursor()
之间的不同行为,我会对此进行研究。它应该包含最少的复制数据。嘿,谢谢你的帮助。我终于找到了解决办法。我也发布了,很高兴知道你解决了这个问题!仅供参考,此问题是很久以前的问题,已在版本3.5.3中修复。