Supposons que vous ayez le tableau "boutiques" suivant
shop_cd | name |
---|---|
0001 | Boutique principale |
0002 | Magasin de dictionnaires |
0003 | Magasin Bunko |
0004 | Librairie d'images |
Je veux une liste de magasins en spécifiant WHERE shop_cd IN (0001, 0002)
.
@Getter
@Setter
public class Shop {
private String shopCd;
private String name;
}
public interface ShopMapper {
/**
*Reçoit une liste de codes de magasin et renvoie une liste de magasins
*/
@SelectProvider(type = SqlProvider.class, method = "selectByShopCodes")
List<Shop> selectByShopCodes(List<String> shopCodes);
class SqlProvider {
public String selectByShopCodes(List<String> shopCodes) {
final String inParams = getInPhraseParamString(shopCodes, "shopCodes");
SQL sql = new SQL() {
{
SELECT("*");
FROM("shops");
WHERE(String.format("shops.shop_cd IN (%s)", inParams));
ORDER_BY("shop_cd ASC");
}
};
return sql.toString();
}
/**
*Recevez la liste et IN()Renvoie la chaîne de paramètres utilisée dans la clause
*Exemple: #{shopCodes[0]}, #{shopCodes[1]}, #{shopCodes[2]}
*/
private String getInPhraseParamString(List<String> values, String paramName) {
String paramString = "";
int i = 0;
for (String value : values) {
if (i != 0) {
paramString += ",";
}
paramString += String.format("#{%s[%s]}", paramName ,i);
i++;
}
return paramString;
}
}
}
# {list [0]}, # {list [1]}, # {list [2]} ...
en fonction de la longueur de la liste et utilisez-les dans la clause IN.Recommended Posts