Saya mencoba membuat metode di CrudRepository yang akan dapat memberi saya daftar pengguna, yang nama penggunanya LIKE parameter input (tidak hanya dimulai dengan, tetapi juga mengandungnya). Saya mencoba menggunakan metode "findUserByUsernameLike(@Param("username") String username)"
tetapi seperti yang diceritakan dalam dokumentasi Spring, metode ini sama dengan " where user.username like ?1
". Ini tidak baik untuk saya, karena saya sudah memberi tahu bahwa saya mencoba mendapatkan semua pengguna yang nama penggunanya berisi ...
Saya menulis kueri ke metode tetapi bahkan tidak menyebarkan.
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
@Query("select u from user u where u.username like '%username%'")
List<User> findUserByUsernameLike(@Param("username") String username);
}
Adakah yang bisa membantu saya dengan ini?
containing
untuk mendapatkan keuntungan dari indeks, lihat docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/…Jawaban:
Coba gunakan pendekatan berikut (ini berhasil untuk saya):
@Query("SELECT u.username FROM User u WHERE u.username LIKE CONCAT('%',:username,'%')") List<String> findUsersWithPartOfName(@Param("username") String username);
Perhatian: Nama tabel dalam JPQL harus dimulai dengan huruf kapital.
sumber
WHERE UPPER(u.username) LIKE CONCAT('%',UPPER(:username),'%')
untuk melakukan pencarian tidak peka huruf besar / kecil@Param
sudah dibersihkan, jadi tidak.Menggunakan Suka:
select ... like :username
List<User> findByUsernameLike(String username);
Dimulai dengan:
select ... like :username%
List<User> findByUsernameStartingWith(String username);
EndingWith:
select ... like %:username
List<User> findByUsernameEndingWith(String username);
Berisi:
select ... like %:username%
List<User> findByUsernameContaining(String username);
Perhatikan bahwa jawaban yang Anda cari adalah angka 4 . Anda tidak harus menggunakan @Query
sumber
List<User> findByUsernameContainingIgnoreCase(String username);
StartingWith: select ... like :username%
danEndingWith: select ... like %:username
... bagaimanapun juga jawaban yang bagus ... harus yang diterima. Terima kasih.Cara lain: sebagai gantinya
CONCAT
fungsi kita bisa menggunakan pipa ganda :: lastname || '%'@Query("select c from Customer c where c.lastName LIKE :lastname||'%'") List<Customer> findCustomByLastName( @Param("lastname") String lastName);
Anda bisa meletakkan di mana saja, awalan, sufiks atau keduanya
:lastname ||'%' '%' || :lastname '%' || :lastname || '%'
sumber
List<User> findByUsernameContainingIgnoreCase(String username);
untuk mengabaikan masalah kasus
sumber
Untuk kasus Anda, Anda dapat langsung menggunakan metode JPA. Itu seperti di bawah ini:
Berisi: pilih ... like%: username%
List<User> findByUsernameContainingIgnoreCase(String username);
Di sini, IgnoreCase akan membantu Anda mencari item dengan mengabaikan case.
Berikut beberapa metode terkait:
Suka
findByFirstnameLike
… Di mana x.firstname seperti? 1
Dimulai dengan
findByFirstnameStartingWith
… Di mana x.firstname seperti? 1 (parameter terikat dengan% tambahan)
EndingWith
findByFirstnameEndingWith
… Di mana x.firstname seperti? 1 (parameter terikat dengan% diawali)
Berisi
findByFirstnameContaining
… Di mana x.firstname seperti? 1 (parameter terikat dibungkus dalam%)
Info lebih lanjut, lihat link ini dan link ini
Semoga ini bisa membantu Anda :)
sumber
Mudah digunakan berikut (tidak perlu menggunakan CONCAT atau ||):
@Query("from Service s where s.category.typeAsString like :parent%") List<Service> findAll(@Param("parent") String parent);
Didokumentasikan di: http://docs.spring.io/spring-data/jpa/docs/current/reference/html .
sumber
Cara ini berfungsi untuk saya, (menggunakan Spring Boot versi 2.0.1. RELEASE):
@Query("SELECT u.username FROM User u WHERE u.username LIKE %?1%") List<String> findUsersWithPartOfName(@Param("username") String username);
Menjelaskan: The? 1,? 2,? 3 dll. Adalah placeholder parameter pertama, kedua, ketiga, dll. Dalam hal ini cukup memiliki parameter yang dikelilingi oleh% seolah-olah itu adalah kueri SQL standar tetapi tanpa tanda kutip tunggal.
sumber
@Query("SELECT u.username FROM User u WHERE u.username LIKE %:username%")
@Query("select u from user u where u.username LIKE :username") List<User> findUserByUsernameLike(@Param("username") String username);
sumber
@Query("select b.equipSealRegisterId from EquipSealRegister b where b.sealName like %?1% and b.deleteFlag = '0'" ) List<String>findBySeal(String sealname);
Saya telah mencoba kode ini dan berhasil.
sumber