Ibatis queryWithRowHandler()似乎仍然可以获取所有行

时间:2010-10-06 08:04:01

标签: java mysql ibatis

我正在使用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未在任何地方设置,因此应启用。

1 个答案:

答案 0 :(得分:1)

在进行更彻底的搜索后,我发现mysql manual on the jbdc implementationmysql 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"