spring-repository-plus
https://github.com/ZhongjunTian/spring-repository-plus
在實(shí)際開發(fā)當(dāng)中, 我發(fā)現(xiàn)很多Restful service都是基本的CRUD操作, 但是Read操作總是最豐富的, 而且每個(gè)都需要手動(dòng)在repository里面定義, 并且對(duì)應(yīng)一個(gè)不同api.
但是鄙人寫了一個(gè)Spring JPA Specification接口的完整實(shí)現(xiàn). 而你只需要寫一行代碼就能讓前端動(dòng)態(tài)過濾查詢.
支持的操作有equal, startswith, endswith, greaterthan等, 支持分頁, 還支持HQL里面的left/inner/right join fetch等以提高性能.
使用這個(gè)我的實(shí)現(xiàn)后, 前端可以這樣查詢:
或者用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 {
}
除了以上的簡(jiǎn)單例子之外, 前端可以用任意組合的邏輯 (and, or)和任意 操作 (equal, startswith, endswith, greaterthan...).
舉個(gè)栗子, 前端需要如下query數(shù)據(jù)
lastName='Tian' AND (address.city='Dallas' OR address.city like 'San%')
你可以這么請(qǐng)求數(shù)據(jù)
或者這樣
而后端的代碼還是只有那么兩行! 只有兩行 !
兩行代碼買不了吃虧 買不了上當(dāng), 卻能買到這么靈活的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
);
目前代碼還在完善當(dāng)中 歡迎提出任何建議
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,