MyBatis: comparer la valeur de Chaîne à l'aide de requête dynamique
Je suis l'aide de MyBatis à la carte certaines requêtes où j'ai besoin de comparer un String
argument (myString
).
Mon Mappeur interface est:
public Map<Integer, String> findSomething(@Param("myString") String myString);
Mon XML est comme suit:
<select id="findSomething" parameterType="String" resultType="Map">
SELECT column1 as key,
column2 as value
FROM my_table
<where>
<choose>
<when test="myString == 'xxx'">
column3 = 1
</when>
<when test="myString == 'yyy'">
myColumn = 2
</when>
<when test="myString == 'zzz'">
myColumn = 3
</when>
</choose>
</where>
ORDER BY value;
</select>
Lorsque j'exécute cette déclaration, le message d'erreur suivant est avaient envoyé:
ERROR [stderr] Caused by: org.apache.ibatis.exceptions.PersistenceException:
ERROR [stderr] ### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'myString' in 'class java.lang.String'
Un String
comparaison de cette façon, sent mauvais. Malheureusement, c'était la façon de la base de données a été modélisé.
MyBatis version: 3.2.2
OriginalL'auteur axcdnt | 2013-10-18
Vous devez vous connecter pour publier un commentaire.
Testé avec MyBatis 3.2.8
Notez les guillemets simples autour d'essai et les doubles guillemets autour de valeurs constantes. L'astuce est d'utiliser égale comme vous pouvez le voir.
OriginalL'auteur Manuel Vera Silvestre
Certainement, j'ai dû passer par une approche compliqué.
Changé mappeur de signature de la méthode:
La XML doit être:
Il suffit de ne pas oublier, celle d'être un POJO, le paramètre de la classe doit avoir sa getters et setters.
parameterType="String"
de l'instruction, puis le type de paramètre devient implicitement une carte parce que vous avez nommé le paramètre avec@Param("myString")
.OriginalL'auteur axcdnt
En supposant Mybatis 3.2.2 et au-dessus, Réviser votre xml pour la suite et voir si cela aide:
OriginalL'auteur Ian Lim
La solution doit être mentionné:
OriginalL'auteur Alexander Davliatov