簡體   English   中英

使用子句和類似列表將 sql 轉換為 JPA

[英]Convert sql to JPA with a in-clause and a list of like

我有如下 sql 語句,並希望將其轉換為 JPA

SELECT * FROM employee
where user_id in ('id1', 'id2', 'id3')
AND (
    first_name like '%name1%' OR last_name like '%name1%'
    OR
    first_name like '%name2%' OR last_name like '%name2%'
    )
ORDER BY user_id ASC;


輸入參數

userIdList - 與大小 [1,100] 的 user_id 完全匹配的字符串列表

nameList - 在字符 [A-Za-z0-9-_ ] 中同樣匹配大小為 [1,100] 的 first_name 或 last_name 的字符串列表

名單示例:['Joe', 'Peter', 'White', 'XY']


我不知道如何處理類似部分的列表,而我擁有的最接近的是沒有類似列表

@Modifying
@Query(value = "select * from employee where user_id IN :ids ORDER BY user_id",
            nativeQuery = true)
List<UserGroupTable> findAllByUserIdList(@Param("ids") List<String> userIdList);

在子句參考: spring JpaRepository 中的 %Like% 查詢

假設意圖是name1name2也是參數,您只需要完成您的 JPA 查詢:

select *
from employee
where user_id IN :ids and (
      first_name like :name1 or last_name like :name1 or
      first_name like :name2 or last_name like :name2)
order by user_id

您更新的 Java 方法:

@Modifying
@Query(value = "select * from employee where user_id IN :ids and (first_name like :name1 or last_name like :name1 or first_name like :name2 or last_name like :name2) order by user_id",
    nativeQuery = true)
List<UserGroupTable> findAllByUserIdList(@Param("ids") List<String> userIdList, @Param("name1") String name1, @Param("name2") String name2);

請注意,您綁定到:name1:name2實際的通配符表達式。 例如,對於John Doe的名稱,您可以將%John%%Doe%綁定到兩個占位符。

正則表達式查詢可能是實現此目的的一種方法,如下所述: Searching multiple colums with a Contains query with a list of Items in Spring-Data JPA

MariaDB / MySQL樣品:

@Query(nativeQuery = true, value = "SELECT * FROM my_entity WHERE "
      + "first_name REGEXP CONCAT_WS('|', :nameslist) " + "OR "
      +  "last_name REGEXP CONCAT_WS('|', :nameslist) ")
    List<MyEntity> findByNames( // (method name does not matter)
                     @Param("nameslist") Collection<String> nameslist);

CONCAT_WS加入提供的列表,例如('val1', 'val2', 'val3')到正則表達式'val1|val2|val3' ,這將匹配例如 'complete val2 xxx'。)

請注意,確切的 REGEXP / CONCAT_WS 函數取決於使用的 DB。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM