2010-10-06 11 views
0

J'utilise Ibatis et Mysql 5.1.37 2.3.4, avec mysql-java-5.1.6 avec connecteur java 1.6Ibatis queryWithRowHandler() semble encore chercher toutes les lignes

J'ai requête qui retourne très beaucoup lignes d'une seule table. Pour ce faire, le manuel suggère d'utiliser queryWithRowHandler(). Cependant quand j'appelle cette requête il semble toujours chercher en interne toutes les lignes (la mémoire monte très vite avant que le premier appel handleRow() soit fait.)

Comment puis-je dire à Ibatis d'aller chercher de petites portions à l'heure (je peux bien sûr utiliser plusieurs requêtes retournant des listes de résultats plus petits, mais à mon avis c'est exactement ce que ibatis devrait faire pour moi)?

EDIT: J'ai essayé de régler un de 100 pour la déclaration, cela ne semble pas faire quoi que ce soit, la même chose pour resultSetType="FORWARD_ONLY"lazyLoadingEnabled

Répondre

1

Après avoir fait plus de détails recherche, j'ai trouvé que le mysql manual on the jbdc implementation et le mysql issue database avaient des informations utiles. Cela revient à avoir besoin de la suivante:

Le pilote JDBC a besoin d'un paramètre pour utiliser le curseur (cela pourrait avoir quelques inconvénients aussi)

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

La déclaration a besoin des propriétés suivantes (avec une valeur utile fetchSize).

fetchSize="1000" resultSetType="FORWARD_ONLY"