2010-07-14 7 views
2

J'utilise iBatisComment pouvons-nous utiliser les limites de mysql avec iBatis en général?

2.3.4

je la requête suivante:

<select id="getUserList" resultMap="userListResult"> 
    SELECT 
      id, 
      name, 
      login, 
      email 
    FROM 
      users 
</select> 

Et quand je dois fournir radiomessagerie J'utilise:

sqlMap.queryForList("base.getUserList", startPosition, numItems); 

Ensuite iBatis génère requête sans limite, et ignore les données supplémentaires lors de la récupération. Je crois que travailler avec des limites est plus rapide.

Comment pouvons-nous pousser iBatis à utiliser LIMIT généralement? C'est possible? Peut-être que nous pouvons décrire certains dialectes?

Répondre

2

Quel est le problème avec le passage de la limite, offset en tant que paramètres? Par exemple (dans Postgresql, je pense que Mysql est similaire):

<select id="getUserList" resultMap="userListResult"> 
    SELECT ... 
    FROM users 
    LIMIT #limit:INTEGER# OFFSET #offset:INTEGER# 
</select> 

Ensuite, dans votre dao vous pourriez le code:

Map params = new HashMap(); 
    params.put("limit",10); 
    params.put("offset",100); 
    res = sqlMap.queryForList("base.getUserList", params); 
+0

Comment voulez-vous implémenter la pagination de ce scénario, si vous voulez montrer et résultats de recherche seulement page par page? – mico

+0

Votre DAO sait juste comment traiter la limite/offset. La couche supérieure doit les calculer pour faire la pagination comme elle le souhaite, cela n'a rien à voir avec iBatis. Voir par exemple http://stackoverflow.com/questions/5412059/how-to-implement-general-pagination – leonbloy

+0

Salut, est-ce pour la version 2 ou 3? Mes paramètres inline (#) sont toujours traduits en? avec ce code. – zeratul021