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测试:
在这里插入图片描述
更多的方法还在摸索中…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值