我正在使用Ibatis 2.3.4和Mysql 5.1.37,使用带有java 1.6的mysql-java-connector 5.1.6
我有查询从单个表返回很多行。为此,手册建议使用queryWithRowHandler()
。但是,当我调用此查询时,它内部似乎仍然会获取所有行(在第一次handleRow()
调用完成之前,内存会非常快速地上升。
我如何告诉Ibatis在时间部分取小(我当然可以使用几个查询返回较小结果的列表,但在我看来,这正是ibatis应该为我做的事情)?
编辑:
我已经尝试为语句设置fetchSize
为100,这似乎没有做任何事情,resultSetType="FORWARD_ONLY"
也是如此。 lazyLoadingEnabled
未在任何地方设置,因此应启用。
答案 0 :(得分:1)
在进行更彻底的搜索后,我发现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"