Angenommen, Sie haben die folgende Tabelle "Geschäfte"
shop_cd | name |
---|---|
0001 | Hauptgeschäft |
0002 | Wörterbuchspeicher |
0003 | Bunko-Laden |
0004 | Bilderbuchladen |
Ich möchte eine Liste der Geschäfte durch Angabe von "WHERE shop_cd IN (0001, 0002)".
@Getter
@Setter
public class Shop {
private String shopCd;
private String name;
}
public interface ShopMapper {
/**
*Erhält eine Liste der Geschäftscodes und gibt eine Liste der Geschäfte zurück
*/
@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();
}
/**
*Erhalten Sie die Liste und IN()Gibt die in der Klausel verwendete Parameterzeichenfolge zurück
*Beispiel: #{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]} ...
entsprechend der Länge der Liste und verwenden Sie sie in der IN-Klausel.Recommended Posts