java后端开发第一篇:springboot+jpa入门(续)

Posted 事在人为,幸福从不抱怨开始!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java后端开发第一篇:springboot+jpa入门(续)相关的知识,希望对你有一定的参考价值。

接上篇https://blog.csdn.net/true100/article/details/103181562,写个简单的jpa条件查询示例,就算是多凑篇博客吧,好久没写了,惭愧!
接口JpaRepository只有以下几个方法供我们使用,很多时候不能满足我们按照条件查询的要求。

public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> 
    List<T> findAll();

    List<T> findAll(Sort var1);

    List<T> findAllById(Iterable<ID> var1);

    <S extends T> List<S> saveAll(Iterable<S> var1);

    void flush();

    <S extends T> S saveAndFlush(S var1);

    void deleteInBatch(Iterable<T> var1);

    void deleteAllInBatch();

    T getOne(ID var1);

    <S extends T> List<S> findAll(Example<S> var1);

    <S extends T> List<S> findAll(Example<S> var1, Sort var2);

不过另外还有个接口JpaSpecificationExecutor,这个就为我们指定条件查询提供了相应api

public interface JpaSpecificationExecutor<T> 
    Optional<T> findOne(@Nullable Specification<T> var1);

    List<T> findAll(@Nullable Specification<T> var1);

    Page<T> findAll(@Nullable Specification<T> var1, Pageable var2);

    List<T> findAll(@Nullable Specification<T> var1, Sort var2);

    long count(@Nullable Specification<T> var1);

比如我们要根据书的作者加文章来查询对应的信息,就可以这样做。

  1. 首先,让我们实现JpaSpecificationExecutor接口:
public interface BookRepository extends JpaRepository<Book, Long>, JpaSpecificationExecutor 



2.编写查询方法(代码写在BookController类中):


    @PostMapping("/queryByAuthor")
    private List<Book> queryBooksByAuthor(@RequestBody BookParams2 bookParams2) 
        Specification<Book> specification = new Specification<Book>() 
            @Override
            public Predicate toPredicate(Root<Book> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) 
                List<Predicate> predicates = new ArrayList<>();
                //判断作者
                if (bookParams2.getAuthor() != null) 
                    predicates.add(criteriaBuilder.equal(root.get("author"), bookParams2.getAuthor()));
                
                //判断书名,用的是Lile模糊匹配
                if (bookParams2.getBookName() != null) 
                    predicates.add(criteriaBuilder.like(root.get("bookName"), "%" + bookParams2.getBookName() + "%"));
                
                return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
            
        ;
        return bookRepository.findAll(specification);
    

3.传入的参数类:

import lombok.Data;

@Data
public class BookParams2 
    private String author;
    private String bookName;

    public String getBookName() 
        return bookName;
    

    public void setBookName(String bookName) 
        this.bookName = bookName;
    

    public String getAuthor() 
        return author;
    

    public void setAuthor(String author) 
        this.author = author;
    


4.postman测试:

更多的方法还在摸索中…

以上是关于java后端开发第一篇:springboot+jpa入门(续)的主要内容,如果未能解决你的问题,请参考以下文章

java后端开发第一篇:springboot+jpa入门

java后端开发第一篇:springboot+jpa入门

java后端开发岗位,成长路线图

第一篇博客

献上Java web后端开发面试经一篇

Java 之SpringBoot+SpringSecurity+Vue实现后台管理系统的开发二后端