java - Ibatis queryWithRowHandler() 似乎仍然获取所有行

标签 java mysql ibatis

我使用的是 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 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"

关于java - Ibatis queryWithRowHandler() 似乎仍然获取所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3870500/

相关文章:

java - 您如何以编程方式搜索 Google 的 Java API

Mysql Foreach 从一张表到另一张表

java - iBatis SQL 映射器日期参数

java - CacheException - 反序列化对象时出错 - MyBatis 和 Play

java - 寻找关于如何在我已经有长度的情况下返回最长的非连续子串的提示(不是答案)

java - onValueSelected() 没有在 BarChart 中调用,而是 onNothingSelected() 每次当我点击 BarChart 中的任何栏或任何地方时调用

Java死锁代码解释

mysql - 我的数据库外键问题

sql - 带 Left Join 的 Mysql 查询太慢了

java - mybatis中如何存储一个键和一个字符串列表