2010-06-26 10 views
3

J'ai une table mgr_employee avec 2 colonnes managerName, teamEmployee.
Bien que je fasse un tri en sql je reçois resultMap non trié en Java.
Comment puis-je obtenir une carte triée? Pourquoi iBatis mélange-t-il le resultMap?Comment obtenir un résultat trié dans iBatis?

<resultMap id="s_filter_defaults_ResultMap" class="java.util.HashMap"> 
    <result property="key" column="managerName"/> 
    <result property="value" column="count"/> 
</resultMap> 

<select id="mCount" parameterClass="java.util.HashMap" resultMap="mcount_ResultMap"> 
    <![CDATA[ 
    select managerName, count(teamEmployee) AS count 
     from mgr_employee 
     group by managerName 
     order by managerName; 
    ]]> 
</select> 

code Java pour appeler le sql ci-dessus:

Map<String,Long> mCountMap = getSqlMapClientTemplate().queryForMap("mCount", "", "key", "value"); 

mCountMap ne sont pas triées comme on s'y attendait en raison de l ' "ordre par" clause dans le sql. Des commentaires/suggestions, comment faire pour que le résultat soit trié?

Répondre

2

Je pense que votre problème pourrait être avec les types Java utilisés. Pour besoin de requête pour une liste, pas pour une carte, parce que le Java HashMap (je suppose que c'est ce que la requête retournera) n'a pas de support pour le tri. Voir les méthodes SqlMapDaoTemplate#queryForList() qui devraient renvoyer ce dont vous avez besoin.

+0

merci !! c'était la solution. – aadidasu

+0

Pouvez-vous copier le correctif ici. Comment avez-vous obtenu la paire de valeur clé en utilisant la liste? – Sree

1

Je pense que votre problème est dû au fait que la carte n'est pas une structure ordonnée: les clés de la carte sont stockées dans l'ordre de leurs codes de hachage. Ce que vous devez faire est de placer les clés de la carte dans un vecteur, puis de les trier (ou de les trier par SQL pour vous, puis de les insérer dans un vecteur). Ensuite, vous pouvez itérer sur le vecteur et accéder à la carte par les touches.

1

Un java.util.LinkedHashMap assurera l'itération dans l'ordre que les éléments ont été ajoutés, essayez d'utiliser cette classe au lieu d'un simple HashMap, qui ne maintient pas l'ordre d'itération.

+0

cela n'a pas fonctionné. Je devais faire getQueryList comme suggéré par A. Ionescu – aadidasu