Comment définir fetchSize pour iBatis instruction select
Je suis en utilisant iBatis comme ORM en Java.
J'ai une instruction select
<select id="getList" resultMap="correctMap">
SELECT *
FROM SOME_TABLE
</select>
Et je suis en utilisant queryForList méthode:
List<MappedObject> list = getSqlMapClientTemplate().queryForList("getList");
Mais il récupère une grande quantité de données et l'exécution de cette requête est assez lent.
Mon hypothèse sur cette questions que iBatis a par défaut de la taille de l'extraction (par exemple, comme dans JDBS 10) c'est pourquoi il si lent. Je tiens donc à définir plus grande taille de l'extraction (1000 par exemple). Comment je peux faire?
Ou suis-je en regardant dans un mauvais sens?
NOTE: j'ai besoin de toutes les données afin de définir des résultats maximum en queryForList
méthode n'est pas une solution appropriée pour moi.
List queryForList(String id,
Object parameterObject,
int skip,
int max)
OriginalL'auteur nkukhar | 2012-01-13
Vous devez vous connecter pour publier un commentaire.
Pas moyen que je connaisse. Vous pourriez mettre en œuvre Plugin intercepteur (MyBatis 3 manuel de l'utilisateur page 17), qui peut être en mesure de définir cette propriété sur toutes les requêtes select passage à travers elle. Cela pourrait ne pas exister pour votre version.
Puis-je définir le fetchSize valeur dynamiquement ?
pour l'enregistrement (mon cas), la récupération de 109 k records a été prise 1m40s. Réglage fetchSize=75 réduit à 15 secondes, fetchsize=500 réduit à 4 secondes, fetchSize=1000, il réduit à 2,8 secondes et fetchSize=2000 réduite de la recherche, de 109 000 lignes à 2,3 secondes. C'est sur une machine virtuelle basée sur le serveur oracle. Votre kilométrage peut varier (dépend aussi de la spécifique de SQL), mais, pour moi, le sweet spot est à fetchsize entre 500 et 1000.
OriginalL'auteur U Mad
Oui, vous pouvez définir fetchSize à un niveau plus élevé et n'a pas besoin de vous soucier de faire pour tous les sélectionner.
Étape 1
Créer un fichier mybatis-config.xml
Vous pouvez ajouter de la valeur pris en charge dans mybatis
http://www.mybatis.org/mybatis-3/configuration.html
Étape 2
Charge comme d'une ressource dans votre fichier de configuration. C'est le Printemps 4 exemple
Étape 3 : vous Passent SqlSessionFactoryBean
Note: je l'ai fait avec myBatis 3.3.0. Il ne fonctionne pas avec myBatis 3.4.4(il est ouvert défaut)
Cela permettra d'assurer que toutes les instructions select ont un fetchSize biens qui leur sont assignées.
OriginalL'auteur vsingh