هل تبحث عن طريقة سهلة لتصفية الكيانات ديناميكيًا؟ لا تنظر أبعد من مرشح الربيع. باستخدام Spring Filter، ستستفيد واجهة برمجة التطبيقات (API) الخاصة بك من وظيفة البحث الشاملة. حتى إذا لم يكن لديك واجهة برمجة تطبيقات ويب، فلا يزال بإمكانك الاستفادة من أداة إنشاء المرشحات القوية لإنشاء استعلامات SQL أو Mongo المعقدة.
إن التصميم المعياري للمكتبة والتكامل السلس مع Spring يجعل من السهل توسيعها باستخدام عوامل تشغيل ووظائف مخصصة، أو حتى دمجها في منصة مختلفة. قل وداعًا لصداع إنشاء استعلامات صالحة في تطبيقات الواجهة الأمامية، حيث يتوفر منشئو عوامل تصفية JavaScript أيضًا لتبسيط العملية.
Spring Filter 3.0.0 هو إصدار جديد تم إنشاؤه من الألف إلى الياء. يتضمن تكاملًا أفضل بكثير مع Spring، مع العديد من الميزات الجديدة والتحسينات وإصلاحات الأخطاء. لم يتغير بناء جملة اللغة، وبالتالي لن تتطلب تطبيقات الواجهة الأمامية أي تعديل. فئة
FilterBuilder
الجديدة غير متوافقة مع الفئة السابقة وتوجد تغييرات جذرية أخرى ولكن الاستخدام الأساسي للمكتبة يظل مشابهًا. لا تتردد في إنشاء مشكلة إذا لاحظت أي خطأ. فكر في دعم المشروع من خلال رعايتنا.
يمكنك الوصول إلى الإصدار الأقدم في فرع 2.xx.
/search?filter= المتوسط (التقييمات) > 4.5 واسم العلامة التجارية في ['audi'، 'land Rover'] و (السنة > 2018 أو كيلومتر < 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
يرجى ملاحظة أن Spring's ConversionService
يتم استخدامه داخليًا عند تحويل الكائنات إلى سلاسل والعكس صحيح. لا يفرض Spring Filter أي نمط للتواريخ والأنواع الأخرى. يجب أن يتم التخصيص مباشرة خلال فصل الربيع إذا لزم الأمر.
بدلاً من كتابة استعلامات السلسلة يدويًا في تطبيقات الواجهة الأمامية، يمكنك استخدام منشئ استعلام 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" |
أو | أو التعبيرين | القيمة ~ '*مرحبا*' أو الاسم ~ '*العالم*' |
لا | ليس تعبيرا | ليس (المعرف > 100 أو فئة الطلب فارغة) |
حرفي | وصف | مثال |
---|---|---|
~ | يتحقق مما إذا كان التعبير الأيسر (السلسلة) مشابهًا للتعبير الأيمن (السلسلة). | اسم الكتالوج ~ '*إلكتروني*' |
~~ | يشبه عامل التشغيل السابق ولكنه غير حساس لحالة الأحرف | اسم الكتالوج ~~ 'ElEcTroNic*' |
: | يتحقق مما إذا كان التعبير الأيسر يساوي التعبير الأيمن | المعرف : 5 |
! | يتحقق مما إذا كان التعبير الأيسر لا يساوي التعبير الأيمن | اسم المستخدم ! "تورشيد" |
> | يتحقق مما إذا كان التعبير الأيسر أكبر من التعبير الأيمن | المسافة > 100 |
>: | يتحقق مما إذا كان التعبير الأيسر أكبر أو يساوي التعبير الأيمن | المسافة >: 100 |
< | يتحقق مما إذا كان التعبير الأيسر أصغر من التعبير الأيمن | المسافة < 100 |
<: | يتحقق مما إذا كان التعبير الأيسر أصغر أو يساوي التعبير الأيمن | المسافة <: 100 |
فارغة | يتحقق مما إذا كان التعبير فارغًا | الحالة فارغة |
ليست فارغة | يتحقق مما إذا كان التعبير ليس فارغًا | الحالة ليست فارغة |
فارغ | يتحقق مما إذا كان التعبير (المجموعة) فارغًا | الأطفال فارغون |
ليست فارغة | يتحقق مما إذا كان التعبير (المجموعة) ليس فارغًا | الأطفال ليسوا فارغين |
في | يتحقق مما إذا كان التعبير موجودًا في التعبيرات الصحيحة | الحالة في [ 'مهيأ' ، 'نشط' ] |
ليس في | يتحقق مما إذا كان التعبير غير موجود في التعبيرات الصحيحة | الحالة ليست في [ 'فشل' ، 'مغلق' ] |
اسم | وصف | مثال |
---|---|---|
مقاس | إرجاع حجم المجموعة | الحجم ( الحوادث ) |
الأفكار وطلبات السحب هي موضع ترحيب دائما. يتم استخدام نمط Java الخاص بـ Google للتنسيق.
وزعت بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.