Apakah Anda mencari cara mudah untuk memfilter entitas secara dinamis? Tidak terlihat lagi selain Filter Musim Semi. Dengan Spring Filter, API Anda akan mendapatkan keuntungan dari fungsi pencarian yang komprehensif. Bahkan jika Anda tidak memiliki API web, Anda masih dapat memanfaatkan pembuat filter yang kuat untuk menghasilkan kueri SQL atau Mongo yang kompleks.
Desain modular perpustakaan dan integrasi sempurna dengan Spring memudahkan perluasan dengan operator dan fungsi khusus, atau bahkan mengintegrasikannya ke platform berbeda. Ucapkan selamat tinggal pada kerumitan dalam menghasilkan kueri yang valid di aplikasi frontend, karena pembuat filter JavaScript juga tersedia untuk menyederhanakan prosesnya.
Spring Filter 3.0.0 adalah rilis baru yang dibuat dari awal. Ini mencakup integrasi yang jauh lebih baik dengan Spring, dengan banyak fitur baru, peningkatan, dan perbaikan bug. Sintaks bahasanya tidak berubah, oleh karena itu aplikasi frontend tidak memerlukan modifikasi apa pun. Kelas
FilterBuilder
baru tidak kompatibel dengan kelas sebelumnya dan ada perubahan lain yang dapat menyebabkan gangguan, namun penggunaan dasar perpustakaan tetap sama. Silakan membuat masalah jika Anda melihat ada yang salah. Pertimbangkan untuk mendukung proyek ini dengan mensponsori kami.
Anda dapat mengakses versi lama di cabang 2.xx.
/search?filter= rata-rata (peringkat) > 4,5 dan nama merek di ['audi', 'land rover'] dan (tahun > 2018 atau km < 50000) dan warna : 'putih' dan kecelakaan kosong
/* Entity used in the query above */
@ Entity public class Car {
@ Id long id ;
int year ;
int km ;
@ Enumerated Color color ;
@ ManyToOne Brand brand ;
@ OneToMany List < Accident > accidents ;
@ ElementCollection List < Integer > ratings ;
// ...
}
Ya, kami mendukung boolean, tanggal, enum, fungsi, dan bahkan relasi ! Butuh sesuatu yang lain? Beritahu kami di sini.
Sponsori proyek kami dan dapatkan keuntungan karena masalah Anda diprioritaskan untuk diselesaikan dengan cepat.
< dependency >
< groupId >com.turkraft.springfilter</ groupId >
< artifactId >jpa</ artifactId >
< version >3.1.7</ version >
</ dependency >
@ GetMapping ( value = "/search" )
Page < Entity > search ( @ Filter Specification < Entity > spec , Pageable page ) {
return repository . findAll ( spec , page );
}
Repositori harus mengimplementasikan JpaSpecificationExecutor
untuk menjalankan Spesifikasi Spring, SimpleJpaRepository
adalah implementasi yang terkenal. Anda dapat menghapus argumen Pageable
dan mengembalikan List
jika penomoran halaman dan pengurutan tidak diperlukan.
< dependency >
< groupId >com.turkraft.springfilter</ groupId >
< artifactId >mongo</ artifactId >
< version >3.1.7</ version >
</ dependency >
@ GetMapping ( value = "/search" )
Page < Entity > search ( @ Filter ( entityClass = Entity . class ) Query query , Pageable page ) {
return mongoTemplate . find ( query . with ( pageable ), Entity . class );
}
public interface EntityRepository extends MongoRepository < Entity , String > {
@ Query ( "?0" )
List < Employee > findAll ( Document document );
@ Query ( "?0" )
Page < Employee > findAll ( Document document , Pageable pageable );
}
@ GetMapping ( value = "/search" )
Page < Entity > search ( @ Filter ( entityClass = Entity . class ) Document document , Pageable page ) {
return entityRepository . findAll ( query , page );
}
< dependency >
< groupId >com.turkraft.springfilter</ groupId >
< artifactId >core</ artifactId >
< version >3.1.7</ version >
</ dependency >
@ Autowired FilterBuilder fb ;
FilterNode filter = fb . field ( "year" ). equal ( fb . input ( 2023 )). and ( fb . isNull ( fb . field ( "category" ))). get ();
@ Autowired ConversionService cs ;
String query = cs . convert ( filter , String . class ); // year : 2023 and category is null
Harap perhatikan bahwa ConversionService
Spring digunakan secara internal saat mengonversi objek menjadi string dan sebaliknya. Filter Musim Semi tidak menerapkan pola apa pun untuk tanggal dan tipe lainnya. Kustomisasi harus dilakukan langsung dalam Spring jika diperlukan.
Daripada menulis kueri string secara manual di aplikasi frontend, Anda dapat menggunakan pembuat kueri JavaScript.
import { sfAnd , sfEqual , sfGt , sfIsNull , sfLike , sfNot , sfOr } from 'spring-filter-query-builder' ;
const filter = sfAnd ( [
sfAnd ( [ sfEqual ( 'status' , 'active' ) , sfGt ( 'createdAt' , '1-1-2000' ) ] ) ,
sfOr ( [ sfLike ( 'value' , '*hello*' ) , sfLike ( 'name' , '*world*' ) ] ) ,
sfNot ( sfOr ( [ sfGt ( 'id' , 100 ) , sfIsNull ( 'category.order' ) ] ) ) ,
] ) ;
const req = await fetch ( 'http://api/person?filter=' + filter . toString ( ) ) ;
Silakan lihat dokumentasi.
field
, field.nestedField
123
, -321.123
, true
, false
, 'hello world'
, 'escape ' quote'
, '1-01-2023'
[1, 2, 3]
, [field, ['x', 'y'], 99]
f()
, f(x)
, f(x, y)
`place_holder`
x and (y or z)
op expr
, not ready
expr op expr
, x and y
expr op
, field is null
Di bawah ini tercantum operator dan fungsi yang didukung oleh semua integrasi (JPA dan Mongo). Integrasi dapat memperluas bahasa umum ini.
Harfiah | Keterangan | Contoh |
---|---|---|
Dan | dan dua ekspresi | status : 'aktif' dan dibuatPada > '1-1-2000' |
atau | atau dua ekspresi | nilai ~ '*halo*' atau nama ~ '*dunia*' |
bukan | bukan sebuah ekspresi | tidak (id > 100 atau kategori.pesanan adalah nol) |
Harfiah | Keterangan | Contoh |
---|---|---|
~ | memeriksa apakah ekspresi kiri (string) mirip dengan ekspresi kanan (string). | katalog.nama ~ '*elektronik*' |
~~ | mirip dengan operator sebelumnya tetapi tidak peka huruf besar-kecil | katalog.nama ~~ 'ElEcTroNic*' |
: | memeriksa apakah ekspresi kiri sama dengan ekspresi kanan | nomor identitas : 5 |
! | memeriksa apakah ekspresi kiri tidak sama dengan ekspresi kanan | nama belakang ! 'torshid' |
> | memeriksa apakah ekspresi kiri lebih besar dari ekspresi kanan | jarak > 100 |
>: | memeriksa apakah ekspresi kiri lebih besar atau sama dengan ekspresi kanan | jarak >: 100 |
< | memeriksa apakah ekspresi kiri lebih kecil dari ekspresi kanan | jarak < 100 |
<: | memeriksa apakah ekspresi kiri lebih kecil atau sama dengan ekspresi kanan | jarak <: 100 |
adalah nol | memeriksa apakah suatu ekspresi bernilai nol | statusnya nol |
tidak nol | memeriksa apakah suatu ekspresi bukan nol | statusnya bukan nol |
kosong | memeriksa apakah ekspresi (koleksi) kosong | anak-anak kosong |
tidak kosong | memeriksa apakah ekspresi (koleksi) tidak kosong | anak-anak tidak kosong |
di dalam | memeriksa apakah ada ekspresi dalam ekspresi yang benar | status di [ 'diinisialisasi' , 'aktif' ] |
tidak masuk | memeriksa apakah suatu ekspresi tidak ada dalam ekspresi yang benar | status tidak ada di [ 'gagal' , 'ditutup' ] |
Nama | Keterangan | Contoh |
---|---|---|
ukuran | mengembalikan ukuran koleksi | ukuran ( kecelakaan ) |
Ide dan permintaan tarik selalu diterima. Gaya Java Google digunakan untuk pemformatan.
Didistribusikan di bawah lisensi MIT.