spring-repository-plus
https://github.com/ZhongjunTian/spring-repository-plus
在实际开发当中, 我发现很多Restful service都是基本的CRUD操作, 但是Read操作总是最丰富的, 而且每个都需要手动在repository里面定义, 并且对应一个不同api.
但是鄙人写了一个Spring JPA Specification接口的完整实现. 而你只需要写一行代码就能让前端动态过滤查询.
支持的操作有equal, startswith, endswith, greaterthan等, 支持分页, 还支持HQL里面的left/inner/right join fetch等以提高性能.
使用这个我的实现后, 前端可以这样查询:
或者用POST
而这是你后端的所有代码
@PostMapping("/persons")
public List<Person> filter(@RequestBody Filter filter){
return selectFrom(personRepository).leftJoin("address").where(filter).findAll();
}
public interface PersonRepository extends JpaRepository<Person, Long>,JpaSpecificationExecutor {
}
除了以上的简单例子之外, 前端可以用任意组合的逻辑 (and, or)和任意 操作 (equal, startswith, endswith, greaterthan...).
举个栗子, 前端需要如下query数据
lastName='Tian' AND (address.city='Dallas' OR address.city like 'San%')
你可以这么请求数据
或者这样
而后端的代码还是只有那么两行! 只有两行 !
两行代码买不了吃亏 买不了上当, 却能买到这么灵活的query AP I!!
比spring Repository的 findByXXXXXXXX 灵活太多了有木有 !!!
Table definition
CREATE TABLE PERSON (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
first_name varchar(255) not null,
last_name varchar(255) not null,
address_id int null
);
CREATE TABLE ADDRESS (
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
city varchar(255) not null
);
目前代码还在完善当中 欢迎提出任何建议
User guide
clone and run
git clone https://github.com/ZhongjunTian/spring-repository-plus.git
cd spring-repository-plus
mvn spring-boot:run
You can look at PersonControllerTest.java and TestEntityControllerTest.java for more details,
网友评论