Ibatis queryWithRowHandler () все еще, кажется, выбирает все строки - PullRequest
0 голосов
/ 06 октября 2010

Я использую 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 нигде не установлен, поэтому должен быть включен.

1 Ответ

1 голос
/ 06 октября 2010

После более тщательного поиска я обнаружил, что руководство mysql по реализации jbdc и база данных mysql содержат некоторую полезную информацию.Это сводится к необходимости следующего:

Драйверу JDBC требуется настройка для использования курсора (это также может иметь некоторые недостатки)

  <transactionManager type="JDBC" commitRequired="false">
    <dataSource type="SIMPLE">
       ...
      <property name="Driver.useCursorFetch" value="true"/>
    </dataSource>
  </transactionManager>

Оператору нужны следующие свойства (с любыми полезнымизначение fetchSize).

fetchSize="1000" resultSetType="FORWARD_ONLY"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...