คุณกำลังมองหาวิธีที่ง่ายดายในการกรองเอนทิตีแบบไดนามิกหรือไม่? ไม่ต้องมองไปไกลกว่าตัวกรองสปริง ด้วย Spring Filter API ของคุณจะได้รับประโยชน์จากฟังก์ชันการค้นหาที่ครอบคลุม แม้ว่าคุณจะไม่มีเว็บ API คุณยังคงสามารถใช้ประโยชน์จากตัวสร้างตัวกรองที่มีประสิทธิภาพเพื่อสร้างคำสั่ง SQL หรือ Mongo ที่ซับซ้อนได้
การออกแบบแบบโมดูลาร์ของไลบรารีและการบูรณาการอย่างราบรื่นกับ Spring ทำให้ง่ายต่อการขยายด้วยตัวดำเนินการและฟังก์ชันที่กำหนดเอง หรือแม้แต่รวมเข้ากับแพลตฟอร์มอื่น บอกลาอาการปวดหัวในการสร้างข้อความค้นหาที่ถูกต้องในแอปพลิเคชันส่วนหน้า เนื่องจากตัวสร้างตัวกรอง JavaScript ก็พร้อมให้ใช้งานเพื่อทำให้กระบวนการง่ายขึ้น
Spring Filter 3.0.0 เป็นรุ่นใหม่ที่สร้างขึ้นตั้งแต่ต้นจนจบ มีการบูรณาการที่ดีขึ้นมากกับ Spring พร้อมด้วยฟีเจอร์ใหม่ การปรับปรุง และการแก้ไขข้อบกพร่องมากมาย ไวยากรณ์ภาษาไม่เปลี่ยนแปลง ดังนั้นแอปพลิเคชันส่วนหน้าจึงไม่จำเป็นต้องแก้ไขใดๆ คลาส
FilterBuilder
ใหม่เข้ากันไม่ได้กับคลาสก่อนหน้าและมีการเปลี่ยนแปลงอื่นๆ เกิดขึ้น แต่การใช้งานพื้นฐานของไลบรารียังคงเหมือนเดิม โปรดอย่าลังเลที่จะสร้างปัญหาหากคุณสังเกตเห็นสิ่งผิดปกติ พิจารณาสนับสนุนโครงการโดยสนับสนุนเรา
คุณสามารถเข้าถึงเวอร์ชันเก่าได้ในสาขา 2.xx
/search?filter= ค่าเฉลี่ย (เรตติ้ง) > 4.5 และ brand.name ใน ['audi', 'land rover'] และ (ปี > 2018 หรือ km < 50000) และสี : 'สีขาว' และ อุบัติเหตุ ว่างเปล่า
/* 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 ;
// ...
}
ใช่ เรารองรับบูลีน วันที่ การแจงนับ ฟังก์ชัน และแม้แต่ความสัมพันธ์ ! ต้องการอะไรอีกไหม? บอกเราที่นี่
สนับสนุนโครงการของเราและรับประโยชน์จากการจัดลำดับความสำคัญของปัญหาของคุณเพื่อการแก้ไขที่รวดเร็ว
< 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 );
}
พื้นที่เก็บข้อมูลควรใช้ JpaSpecificationExecutor
เพื่อดำเนินการข้อกำหนดของ Spring SimpleJpaRepository
เป็นการใช้งานที่รู้จักกันดี คุณสามารถลบอาร์กิวเมนต์ Pageable
และส่งคืน List
ได้หากไม่จำเป็นต้องแบ่งหน้าและการเรียงลำดับ
< 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
โปรดทราบว่า ConversionService
ของ Spring ถูกใช้เป็นการภายในเมื่อแปลงอ็อบเจ็กต์เป็นสตริงและในทางกลับกัน Spring Filter ไม่บังคับใช้รูปแบบใดๆ สำหรับวันที่และประเภทอื่นๆ การปรับแต่งควรทำโดยตรงภายใน Spring หากจำเป็น
แทนที่จะเขียนคำค้นหาสตริงด้วยตนเองในแอปพลิเคชันส่วนหน้าของคุณ คุณสามารถใช้ตัวสร้างคำค้นหา 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 ( ) ) ;
โปรดดูเอกสารประกอบ
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
ด้านล่างนี้คือรายชื่อตัวดำเนินการและฟังก์ชันที่ได้รับการสนับสนุนจากการรวมระบบทั้งหมด (JPA และ Mongo) การบูรณาการอาจขยายภาษาทั่วไปนี้
ตัวอักษร | คำอธิบาย | ตัวอย่าง |
---|---|---|
และ | และสองสำนวน | สถานะ : 'ใช้งานอยู่' และ สร้างขึ้นเมื่อ > '1-1-2000' |
หรือ | หรือสองสำนวน | ค่า ~ '*สวัสดี*' หรือ ชื่อ ~ '*โลก*' |
ไม่ | ไม่ใช่การแสดงออก | ไม่ (id > 100 หรือ category.order เป็นโมฆะ) |
ตัวอักษร | คำอธิบาย | ตัวอย่าง |
---|---|---|
- | ตรวจสอบว่านิพจน์ด้านซ้าย (สตริง) คล้ายกับนิพจน์ด้านขวา (สตริง) หรือไม่ | Catalog.name ~ '*อิเล็กทรอนิกส์*' |
- | คล้ายกับตัวดำเนินการก่อนหน้านี้ แต่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ | Catalog.name ~~ 'ElEcTroNic*' |
- | ตรวจสอบว่านิพจน์ด้านซ้ายเท่ากับนิพจน์ด้านขวาหรือไม่ | รหัส : 5 |
- | ตรวจสอบว่านิพจน์ด้านซ้ายไม่เท่ากับนิพจน์ด้านขวาหรือไม่ | ชื่อผู้ใช้ ! 'ตอร์ชิด' |
- | ตรวจสอบว่านิพจน์ด้านซ้ายมากกว่านิพจน์ด้านขวาหรือไม่ | ระยะทาง > 100 |
- | ตรวจสอบว่านิพจน์ด้านซ้ายมากกว่าหรือเท่ากับนิพจน์ด้านขวา | ระยะห่าง >: 100 |
- | ตรวจสอบว่านิพจน์ด้านซ้ายมีขนาดเล็กกว่านิพจน์ด้านขวาหรือไม่ | ระยะทาง < 100 |
- | ตรวจสอบว่านิพจน์ด้านซ้ายมีขนาดเล็กกว่าหรือเท่ากับนิพจน์ด้านขวาหรือไม่ | ระยะห่าง <: 100 |
เป็นโมฆะ | ตรวจสอบว่านิพจน์เป็นโมฆะหรือไม่ | สถานะ เป็นโมฆะ |
ไม่เป็นโมฆะ | ตรวจสอบว่านิพจน์ไม่เป็นโมฆะหรือไม่ | สถานะ ไม่เป็นโมฆะ |
ว่างเปล่า | ตรวจสอบว่านิพจน์ (คอลเลกชัน) ว่างเปล่าหรือไม่ | เด็กๆ ว่างเปล่า |
ไม่ว่างเปล่า | ตรวจสอบว่านิพจน์ (คอลเลกชัน) ไม่ว่างเปล่า | เด็กๆ ไม่ว่าง |
ใน | ตรวจสอบว่ามีนิพจน์อยู่ในนิพจน์ที่ถูกต้องหรือไม่ | สถานะ ใน [ 'เริ่มต้น' , 'ใช้งานอยู่' ] |
ไม่เข้า | ตรวจสอบว่าไม่มีนิพจน์อยู่ในนิพจน์ที่ถูกต้องหรือไม่ | สถานะ ไม่อยู่ใน [ 'ล้มเหลว' , 'ปิด' ] |
ชื่อ | คำอธิบาย | ตัวอย่าง |
---|---|---|
ขนาด | ส่งคืนขนาดของคอลเลกชัน | ขนาด ( อุบัติเหตุ ) |
ยินดีต้อนรับแนวคิดและคำขอดึงเสมอ Java Style ของ Google ใช้สำหรับการจัดรูปแบบ
เผยแพร่ภายใต้ใบอนุญาต MIT