开发者

Spring Data JPA命名约定查询实现方法

开发者 https://www.devze.com 2023-12-11 10:25 出处:网络 作者: zz
目录很笨的实现JpaRepository继承四个接口的作用如何使用命名约定查询Sample总结很笨的实现
目录
  • 很笨的实现
    • JpaRepository
    • 继承四个接口的作用
  • 如何使用命名约定查询
    • Sample
  • 总结

    很笨的实现

    假设我只要需要最后三条数据,如下是我的实现方法,这是一个很笨的实现,因为这个操作是真的很冗余,这个是请求到了全部,在进行降序排序,然后在截取前面三条数据。

    // 创建一个 Sort 对象,表示按照 ID 降序排列
            Sort sort = Sort.by(Sort.Direction.DESC, "id");
            List<Rank> allRanks = this.rankRepository.findAll(sort);
            int size = allRanks.size();
            if (size > 3) {
                allRjsanks 编程客栈= allRanks.subList(0, 3);
            }

    Sort.Direction.DESC 按降序排序,desc 是descend的缩写

    Sort.Direction.ASC 按升序排序,asc 是ascend的缩写

    JpaRepository

    根据上面操作,起码写了六行代码,我只需要使用命名约定查询findTop3ByOrderByIdDesc()这个方法jpa会根据这个方法名称返回前面三条数据。

    Spring Data JPA命名约定查询实现方法

    在前面已经继承JpaRepository接口。JpaRepository接口又继承了四个接口PagingAndSortingRepository、CrudRepository、Repository、QueryByExampleExecutor,看到接口继承关系图如下:

    Spring Data JPA命名约定查询实现方法

    从上图中我们可以看到两种线,虚线和带箭头的实线。

    • 实线带箭头: 通常表示继承关系。在继承关系中,子类继承了父类的属性和方法。实线箭头的方向指向父类,表示子类是从父类继承而来。
    • 虚线: 通常表示关联或依赖关系。在关联关系中,一个类与另一个类有某种关联,但不一定是继承关系。虚线箭头的方向通常表示关联的方向,即其中一个类依赖于另一个类。

    继承四个接口的作用

    • Repository接口:提供了基本的 CRUD 操作android,是仓库接口层次结构的最顶层。
    • CrudRepository接口:CrudRepository 是继承自 Repository 接口的子接口,提供了基本的 CRUD 方法,包括保存、查询、更新和删除。
    • PagingAndSortingRepository接口:PagingAndSortingRepository 是继承自 CrudRepository 接口的子接口。
    • QueryjavascriptByExampleExecutor 接口:支持基于实例的动态查询的方法、允许你通过传递一个示例对象来执行查询,而不需要手动编写查询语句。

    如何使用命名约定查询

    Spring Data JPA提供的方法命名规则定义方法的名称,就可以完成查询工作。程序执行的时候会根据方法名称进行解析,并自动生成sql语句进行查询。

    规则如下:

    1.findBy  + 属性名称 (根据属性名称进行完成匹配的查询=)findByName

    2.findBy  + 属性名称 + “查询方式(Like | isnull)” findByNameLike

    3.多条件查询

     findBy + 属性名 + “查询方式”   + “多条件的连接符(and|or)”  + 属性名 + “查询方式” 既 findByWeekReportIdAndVoteUserId

    Sample

    public class Vote extends BaseEntity<Long> {
        @ManyToOne
        private User voteUser;
        @ManyToMany
        private List<VoteDetail> voteDetails;
        @ManyToOne
        private WeekReport weekReport;
    }

    实现查询:

    List<phpVote> votesFind = voteRepository.findAll();
     List<Vote> votes = voteRepository.findByWeekReportIdAndVoteUserId(1L, 1L);

    Spring Data JPA命名约定查询实现方法

    这样就实现多条件查询了,我想如果我不知道这个命名约定查询之前肯定会,先全部请求到数据,然后一个个for if去对比数据,最后才拿到我想要的数据。

    总结

    使用命名约定查询,减少错误的发生,提高开发效率,简化查询语句的编写;这样也使得代码更具有易读性,而且只需要定义方法的命名即可。

    参考

    官网地址:https://springdoc.cn/spring-data-jpa/#repositories.namespace-...

    以上就是Spring Data JPA命名约定查询实现方法的详细内容,更多关于Spring Data JPA命名约定查询的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号