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