美文网首页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