Skip to content

Luncert/filters-query

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

filters-query

filters-query can translate your query string to JPA criteria, Lucene query and Java predicates, which empowers you build complex query API fast.

1.Syntax

filter by <criterias> [offset <number>] [limit <number>] [sort by <orders>]

Criterias

filters-query supports following operators:

  • between: exampleField between [,130]
  • empty, not empty: exampleField = empty, exampleField != empty
  • starts with: exampleField startsWith "prefix"
  • ends with: exampleField endsWith "suffix"
  • like: exampleField like "asd"
  • equal, not equal: =, !=
  • gt, get: >, >=
  • lt, let: <, <=
  • in: exampleField in ("Value1", "Value2")

data types:

  • number: 130, 130.22
  • boolean: true, false
  • string: "asd"
  • null: null

bool expression: a = 123 and (b like "value" or c in [1,3,8])

Pagination

You can use limit and offset to do page query, like: filter by id > 10 offset 20 limit 10, this query means requesting the page 2 (index from 0).

Sorts

Examples:

  • sort by id desc: sort by id desc
  • sort by multiple fields: filter by () sort by id desc, name asc

2.Integrate with JPA

Maven Dep:

<dependency>
  <groupId>org.luncert.filters-query</groupId>
  <version>1.0-SNAPSHOT</version>
  <artifactId>jpa-impl</artifactId>
</dependency>

Define entity according to JPA requirements:

@Entity
class TestEntity {

  @Id
  private Long id;

  private String name;
}

Impl search engine:

import jakarta.persistence.EntityManager;
import org.luncert.filtersquery.jpaimpl.JpaFiltersQueryEngine;
import org.luncert.filtersquery.jpaimpl.model.LogHeader;
import org.springframework.stereotype.Component;

@Component
public class TestEntitySearchImpl extends JpaFiltersQueryEngine<TestEntity> {

  public LogHeaderSearchImpl(EntityManager em) {
    super(em);
  }
}

Process query:

searchEngine.searchPages("filter by id < 10 offset 5 limit 5");

3.Translate query to predicates

Maven Dep:

<dependency>
  <groupId>org.luncert.filters-query</groupId>
  <version>1.0-SNAPSHOT</version>
  <artifactId>predicate-impl</artifactId>
</dependency>

Define model:

class TestModel {

  private Long id;

  private String name;
}

Usage:

List<TestModel> input = ...;
Predicate<TestModel> predicate = PredicateFiltersQueryEngine
  .buildQuery(criteria, TestModel.class);
List<TestModel> filtered = data.stream().filter(predicate);

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •