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);
比如我们要根据书的作者加文章来查询对应的信息,就可以这样做。
- 首先,让我们实现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入门(续)的主要内容,如果未能解决你的问题,请参考以下文章