[JAVA] [Spring] [MyBatis] Utiliser IN () avec SQL Builder

demande

échantillon

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).

Classe qui contient des données

@Getter
@Setter
public class Shop {
  private String shopCd;
  private String name;
}

Cartographe

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;
    }
  }
}

Conseils

Recommended Posts

[JAVA] [Spring] [MyBatis] Utiliser IN () avec SQL Builder
[JAVA] [Spring] [MyBatis] Utiliser GROUP BY dans SQL Builder
Utiliser des opérateurs de comparaison d'inégalités dans MyBatis SQL
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Utilisez Interceptor au printemps
Utiliser OpenCV avec Java
Utiliser PreparedStatement en Java
Encoder les paramètres de requête avec Uri Components Builder au printemps
Utiliser des couches Lambda avec Java
Configuration Java avec Spring MVC
Utilisation de Mapper avec Java (Spring)
Utiliser Spring JDBC avec Spring Boot
Utiliser SpatiaLite avec Java / JDBC
Comment appeler et utiliser l'API en Java (Spring Boot)
Comment utiliser le type d'énumération Java (Enum) dans Mapper XML de MyBatis
Utilisez thymeleaf3 avec le parent sans spécifier spring-boot-starter-parent dans Spring Boot
Comment utiliser la même classe Mapper dans plusieurs sources de données avec Spring Boot + MyBatis
Comment utiliser Lombok au printemps
Utiliser l'authentification de base avec Spring Boot
Analyse morphologique en Java avec Kuromoji
Utiliser le constructeur avec des arguments dans cucumber-picocontainer
Utiliser Microsoft Graph avec Java standard
Utilisons Twilio en Java! (Introduction)
Utiliser Azure Bing SpellCheck avec Java
Utilisez JDBC avec Java et Scala.
[Java] N'utilisez pas "+" dans append!
Utilisez des clés composites dans Java Maps.
Utiliser Java 11 avec Google Cloud Functions
Comment utiliser les classes en Java?
À partir de Spring Boot 0. Utilisez Spring CLI
Tweak Markdown avec Java flexmark-java
Utilisez-vous Stream en Java?
Comparez Hello, world! Avec Spring Boot avec Java, Kotlin et Groovy
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Utilisez OpenCV_Contrib (ArUco) avec Java! (Partie 2-Programmation)
Méthode de concurrence en Java avec exemple de base
Créer un projet Java Spring Boot avec IntelliJ
Utilisez "Rhino" qui exécute JavaScript en Java
Utiliser la méthode de requête DynamoDB avec Spring Boot
[JaCoCo (Java Code Coverage)] Utilisation avec NetBeans
Lire le fichier xlsx en Java avec Selenium
Spring Java
Diviser une chaîne avec ". (Dot)" en Java
Utiliser les balises JSP Spring Security avec FreeMarker
Gérez d'énormes JSON avec Java Lambda
[Java Spring MVC] Je souhaite utiliser DI dans ma propre classe
[* Java *] J'ai participé au JJUG CCC 2019 Spring
Utiliser le cache avec EhCashe 2.x avec Spring Boot
Utilisez JDBC Manager avec les paramètres de jdbc.dicon.
Testez le contrôleur avec Mock MVC dans Spring Boot
Traitement asynchrone avec exécution régulière dans Spring Boot
Jusqu'à l'acquisition de données avec Spring Boot + MyBatis + PostgreSQL
Lire une chaîne dans un fichier PDF avec Java
Créer un CSR avec des informations étendues en Java
Outil GUI refactorisé réalisé avec Java8 + JavaFX en 2016
Utilisez OpenCV_Contrib (ArUco) avec Java! (Partie 1-Construire) (OpenCV-3.4.4)
Comment utiliser h2db intégré avec Spring Boot
Avec Tomcat, vous pouvez utiliser des espaces réservés ($ {...}) dans web.xml.
Les tests avec @Parameters dans Spring 4.3 ne devraient avoir aucun paramètre
Comment utiliser le framework Java avec AWS Lambda! ??