Afin de passer dynamiquement la valeur de la condition de la clause where dans MyBatis, je pense qu'il est courant de la traiter comme une instruction préparée en utilisant "#" comme indiqué ci-dessous.
Fichier de définition SQL.xml
<select id="getHogeValue" resultType="java.util.Map">
select *
form hoge_table
where foo_1 = #{foovalue}
</select>
Cette section décrit comment modifier dynamiquement les colonnes à acquérir. En d'autres termes, il est utile lorsque la colonne spécifiée dans la clause select est indéfinie.
Java:JDK1.7 MyBatis:mybatis-3.2.5.jar
Au lieu de le passer comme valeur d'une instruction préparée Utilisez "$" pour passer sous forme de chaîne.
Voici un exemple.
Classe d'accès aux données.java
//Définir la partie dynamique du nom de la colonne dans List
List<Integer> columnIdList = Arrays.asList(1,2,3,4);
//Définir la liste de pièces dynamiques de nom de colonne comme Map
Map params = new HashMap();
params.put("column_id_list", columnIdList);
//FOO de la table Hoge_1, FOO_2, FOO_3, FOO_4, BAR_1, BAR_2, BAR_3, BAR_Obtenez 4
List<Map> hogeValueLsit = hogeTableMapper.getHogeValue(params);
//Vérifiez le contenu acquis
for (Map elm : hogeValueLsit) {
int idx = 0;
for (Integer columnId : columnIdList) {
String foo = (String)elm.get("FOO_"+columnId);
System.out.println("FOO_" + idx + "Le second est" + foo + "est.");
String bar = (String)elm.get("BAR_"+columnId);
System.out.println("BAR_" + idx + "Le second est" + bar + "est.");
}
}
Fichier de définition SQL.xml
<select id="getHogeValue" resultType="java.util.Map">
select
<foreach item="column_id" collection="column_id_list">
foo_${column_id}
,bar_${column_id}
</foreach>
from hoge_table
</select>
Notez que le nom de la colonne est "lettre supérieure" lors de la récupération côté Java Même s'il est rendu plus bas que «foo_» du côté du fichier de définition SQL La clé Map côté Java ne peut être obtenue qu'avec "FOO_" en majuscule.
c'est tout.