sql >> データベース >  >> RDS >> Mysql

Spring Boot JPA:同じパラメーターに複数の値を渡す(JPQL)

    @Query コンパイル時にJPQLを使用して修正する必要があります。そうしないと、ネイティブクエリでさえ、この種のことを特にタイプセーフな方法で実装するのが難しくなります。

    ですから、あなたはJPQLソリューションを求めていると思いますが、これはSpecificationを学び、活用する絶好の機会です。 インターフェイスとJPAのCriteriaQuery。これはまさにそのためです。

    次のリポジトリを見てください:

    public interface Table1Repository            // to use specifications in queries 
            extends JpaRepository<Table1, Long>, JpaSpecificationExecutor<Table1> {
    
        @SuppressWarnings("serial")
        public static Specification<Table1> multiLikeColumn1(List<String> likePatterns) {
            return new Specification<Table1>() {
                @Override
                public Predicate toPredicate(Root<Table1> root, CriteriaQuery<?> query,
                                                CriteriaBuilder criteriaBuilder) {
                    Path<String> column1 = root.get("column1");
                    // create a Predicate for each "column1 like 'xy%az%' you need
                    List<Predicate> predicates = likePatterns.stream()
                        .map(likePattern -> criteriaBuilder.like(column1, likePattern))
                        .collect(Collectors.toList());
                    // then "concatenate" list of likes with "OR"
                    return criteriaBuilder.or(predicates.toArray(new Predicate[]{}));
                }
            };
        }
    
    }
    

    少し複雑に見えるかもしれませんが、実際には慣れていない場合はそうではありません。使い方は次のように簡単です:

    @Resource
    private Table1Repository repo;
    repo.findAll(Table1Repository.multiLikeColumn1(Arrays.asList("%X%","%Z%")))
    



    1. SQLServer2008で選択したクエリ結果からテーブルを作成する方法

    2. ClusterControl CMON HA for Distributed Database High Availability-パート2(GUIアクセスセットアップ)

    3. SQL ServerでNULLを別の値に置き換える方法– ISNULL()

    4. 重要なSQLデータベースを回復するための2020年に最適なSQL回復ツール