美文网首页SpringBoot精选Spring BootSpring-Boot
Spring JPA repository 一行代码+开源工具,

Spring JPA repository 一行代码+开源工具,

作者: JonTian | 来源:发表于2017-06-26 03:13 被阅读0次

English Version

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,

相关文章

网友评论

    本文标题:Spring JPA repository 一行代码+开源工具,

    本文链接:https://www.haomeiwen.com/subject/yrrdcxtx.html