我使用的是 Ibatis 2.3.4 和 Mysql 5.1.37,以及 mysql-java-connector 5.1.6 和 java 1.6
我的查询从单个表中返回很多行。为此,手册建议使用queryWithRowHandler()
。但是,当我调用此查询时,它在内部似乎仍然会获取所有行(在第一个 handleRow()
调用完成之前,内存增长得非常快。
我如何告诉 Ibatis 在时间部分获取较小的内容(我当然可以使用多个查询返回较小结果的列表,但在我看来,这正是 ibatis 应该为我做的事情)?
编辑:
我尝试将语句的 fetchSize
设置为 100,这似乎没有任何作用,resultSetType="FORWARD_ONLY"
也是如此。 lazyLoadingEnabled
未在任何地方设置,因此应该启用。
最佳答案
经过更彻底的搜索,我发现mysql manual on the jbdc implementation和 mysql issue database有一些有用的信息。这归结为需要以下内容:
JDBC 驱动程序需要设置才能使用游标(这也可能有一些缺点)
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
...
<property name="Driver.useCursorFetch" value="true"/>
</dataSource>
</transactionManager>
该语句需要以下属性(具有任何有用的值 fetchSize)。
fetchSize="1000" resultSetType="FORWARD_ONLY"
关于java - Ibatis queryWithRowHandler() 似乎仍然获取所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3870500/