spring data jpa 條件分頁查詢
package com.zuidaima.springdata.service.impl;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Predicate ;
import javax.persistence.criteria.Root;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.jpa.domain.Specification ;
import org.springframework.stereotype.Service;
import com.zuidaima.springdata.entity.User;
import com.zuidaima.springdata.repository.UserRepository;
import com.zuidaima.springdata.service.UserService;
/**
* *@author javaniu 2013-06-04 22:27:23
*/
@Service
public class UserServiceImpl implements UserService {
@Resource
public UserRepository userRepository;
@Override
public User findOneByName(final String name) {
Specification<User> specification = new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root,
CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Predicate _name = criteriaBuilder.equal(root.get("name"), name);
return criteriaBuilder.and(_name);
}
};
return userRepository.findOne(specification);
}
@Override
public Page<User> findAllByLargeThanId(final Long id, int page, int count,
Sort sort) {
Specification<User> specification = new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root,
CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Path<Long> $id = root.get("id");
Predicate _id = criteriaBuilder.gt($id, id);
return criteriaBuilder.and(_id);
}
};
Pageable pageable = new PageRequest(page - 1, count, sort);
return userRepository.findAll(specification, pageable);
}
@Override
public User findAllByIdAndName(final Long id, final String name) {
Specification<User> specification = new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root,
CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates = new ArrayList<Predicate>();
Path<Long> $id = root.get("id");
Predicate _id = criteriaBuilder.equal($id, id);
predicates.add(_id);
Path<Long> $name = root.get("name");
Predicate _name = criteriaBuilder.equal($name, name);
predicates.add(_name);
return criteriaBuilder.and(predicates
.toArray(new Predicate[] {}));
}
};
return userRepository.findOne(specification);
}
@Override
public Page<User> findAllByLikeName(final String name, int page, int count) {
Specification<User> specification = new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root,
CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Path<String> _name = root.get("name");
Predicate _key = criteriaBuilder.like(_name, "%" + name + "%");
return criteriaBuilder.and(_key);
}
};
Sort sort = new Sort(Direction.DESC, "id");
Pageable pageable = new PageRequest(page - 1, count, sort);
return userRepository.findAll(specification, pageable);
}
@Override
public Page<User> findAllByInIds(final List<Long> ids) {
Specification<User> specification = new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root,
CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.in(root.get("id")).value(ids);
}
};
int page = 1;
int count = ids.size();
Sort sort = new Sort(Direction.DESC, "id");
Pageable pageable = new PageRequest(page - 1, count, sort);
return userRepository.findAll(specification, pageable);
}
@Override
public List<User> findAllByIds(List<Long> ids) {
return userRepository.findAllByIds(ids);
}
@Override
public User findAllByName(String name) {
return userRepository.findAllByName(name);
}
}
===================================== 華麗分割線 ===============================================
以下是我在專案中的實際運用:
1.實體類:GsTest(這裡就不貼程式碼了)
2.Dao層:
@Repository
public interface GsTestDao extends JpaRepository<GsTest, Long>,JpaSpecificationExecutor<GsTest>{
}
3.Service層 :(也可以是單獨的某個引數,詳情見上面),page:頁數,conut:每頁的條數,sort:排序
Page<GsTest> findOneByName(GsTest gsTest,int page,int count,Sort sort);
4.ServiceImpl層
//分頁 條件為年齡和 姓名。 @Override public Page<GsTest> findOneByName(final GsTest gsTest,int page,int count,Sort sort) { Specification<GsTest> specification = new Specification<GsTest>() { @Override public Predicate toPredicate(Root<GsTest> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) { List<Predicate> predicates = new ArrayList<Predicate>(); //引數非空判斷。不為空則加此條件 if (!gsTest.getAge().isEmpty()) { Predicate _age = criteriaBuilder.equal(root.get("age"), gsTest.getAge()); predicates.add(_age); System.out.println("_age:"+gsTest.getAge().isEmpty()); } Predicate _name = criteriaBuilder.equal(root.get("name"), gsTest.getName()); predicates.add(_name); //return criteriaBuilder.and(_name);return criteriaBuilder.and(predicates.toArray(new Predicate[]{})); } };
4.controller:控制層
/**
*
* @param gsTestDto 實體,用來接收傳來JSON型別引數
* @param pageNumber 頁數
* @param pageSize 條數
* @return
*/
@RequestMapping(value="/fin",method = RequestMethod.POST)
@ResponseBody
public Page<GsTest> findTest(@RequestBody GsTestDto gsTestDto,@RequestParam(value = "page", defaultValue = "1") int pageNumber,
@RequestParam(value = "size", defaultValue = Constants.PAGE_SIZE_10) int pageSize){
GsTest gsTest = new GsTest();
gsTest=converterIn.convertIn(gsTestDto);
System.out.println("GsTestDto:"+gsTest);
//排序
Sort sort = new Sort(Direction.ASC, "id");
Page<GsTest> findOneByName = gsTestDaoService.findOneByName(gsTest,pageNumber,pageSize,sort);
return findOneByName;
}
到此,條件分頁就完成了。看看測試結果:
我用的是 谷歌的Postman來進行測試:
1.傳參:
{ "name": "jak" }
結果:
{
"content": [
{
"id": 3,
"properties_string": null,
"name": "jak",
"age": "21",
"sex": "女",
"status": "1",
"certime": "2013-05-11 09:00:00"
},
{
"id": 4,
"properties_string": null,
"name": "jak",
"age": "21",
"sex": "女",
"status": "1",
"certime": "2013-05-11 09:00:00"
},
{
"id": 5,
"properties_string": null,
"name": "jak",
"age": "21",
"sex": "女",
"status": "1",
"certime": "2013-05-11 09:00:00"
}
],
"size": 10,
"number": 0,
"sort": [
{
"direction": "ASC",
"property": "id",
"ascending": true
}
],
"lastPage": true,
"firstPage": true,
"totalPages": 1,
"totalElements": 3,
"numberOfElements": 3
}
2.傳錯誤的引數:
{
"name": "jak",
"age":"22"
}
結果:
{ "content": [], "size": 10, "number": 0, "sort": [ { "direction": "ASC", "property": "id", "ascending": true } ], "lastPage": true, "firstPage": true, "totalPages": 0, "totalElements": 0, "numberOfElements": 0 }
可以看得到 查不到的時候。content 是空值!
到此,簡單的條件分頁查詢就完成了,我也是小白,不妥之處見諒!
===============2017年3月2日10:28:46======= 華麗分割線 ===============================================
注:接著上面的
實體類:prid
實體類中有一個時間屬性:
private Date beginTime;
private Date endTime;
JPA 查詢運用的時候應該是:
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Predicate dueTime = criteriaBuilder.between(root.<Date>get("dueTime"),sdf2.parse(prid.getBeginTime()),sdf2.parse(prid.getEndTime()));
注:parse()返回的是一個Date型別資料
相關推薦
spring data jpa 條件分頁查詢
package com.zuidaima.springdata.service.impl; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import javax.persiste
在Spring Boot中使用Spring-data-jpa實現分頁查詢(轉)
分頁查詢 log def inpu database ext identity odin btn 在我們平時的工作中,查詢列表在我們的系統中基本隨處可見,那麽我們如何使用jpa進行多條件查詢以及查詢列表分頁呢?下面我將介紹兩種多條件查詢方式。 1、引入起步依賴
Spring Data JPA 之分頁查詢
JPA的分頁查詢確實使用起來確實很簡單,但理解起來有點困難,此處只是實現JPA分頁的程式碼塊。 定義實體類: @Entity @Table(name = "t_pub_info") @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_REA
SpringBoot學習筆記10——spring-data-jpa之分頁查詢
今天我們來學習一下spring-data-jpa的分頁查詢的實現 在上次初探JPA之後我們接下來學習分頁查詢,本篇部落格是接上一篇的,如果有需要了解jpa配置的話可以看上一篇部落格https://blog.csdn.net/lp840312696/article/details/83549937
在Spring Boot中使用Spring-data-jpa實現分頁查詢
在我們平時的工作中,查詢列表在我們的系統中基本隨處可見,那麼我們如何使用jpa進行多條件查詢以及查詢列表分頁呢?下面我將介紹兩種多條件查詢方式。 1、引入起步依賴 <dependency> <groupId>org.springframe
Spring data JPA 的分頁功能及複雜語句查詢
測試的資料表 // 實體類 @Entity @Data @AllArgsConstructor @NoArgsConstructor @Table(name="demo_user") public class DemoUser { @Id @Gener
Mongodb系列- 使用spring-data-mongodb實現分頁查詢
mon 分頁查詢 rep template list pre pri 自動生成 aging 在用spring-data-mongodb框架開發的過程中,需要實現分頁查詢,就百度了下,沒找到滿意的又google了下,找到了思路. 在spring-data-mongodb 官
Spring Data之Slice分頁查詢
背景 專案中我們經常用到分頁查詢,一般使用的場景有兩個 前端查詢大批量資料時指定page、size分頁查詢 後臺定時處理一批資料時,從資料庫獲取待處理資料,從而避免一次查詢太多資料到記憶體,處理完一批後再查詢下一頁的資料處理 對於場景2也有兩種實現方式
SpringBoot整合Spring Data JPA(包含分頁、排序操作)完成資料獲取
Spring Data JPA是Spring基於Hibernate開發的一個JPA框架。如果用過Hibernate或者MyBatis的話,就會知道物件關係對映(ORM)框架有多麼方便。但是Spring Data JPA框架功能更進一步,為我們做了 一個數據持久層框架幾乎能做的任何事情。
spring data JpaSpecificationExecutor介面分頁帶多種條件查詢
DAO層繼承JpaSpecificationExecutor介面@Overridepublic Page<AbnormalEntity> fetchAbnormals(QueryCondition query,Integer page,Integer rows)
springboot jpa mongodb 多條件分頁查詢
sort ndt int integer mongod nbsp boot amp success public Page<Recorded> getRecordeds(Integer page, Integer size, Recorded recorded)
JPA分頁查詢與條件分頁查詢
1.8 art array ESS valueof previous sof clas sql 情有獨鐘的JPA 平時在寫一些小項目時,比較喜歡引用 Spring Data Jpa,其實還是圖他寫代碼快~在日常的開發工作中,分頁列表查詢基本是隨處可見,下面一起看一下如
bos 第4 (區域excel批量導入、區域通用分頁查詢、分區的添加、分區多條件分頁查詢、分區導出excel)
sea htm 不能 長安 基金會 格式 address ret body BOS項目筆記 第4天 今天內容安排: 1、區域批量導入功能 jQuery OCUpload(一鍵上傳插件)、apache POI、pinyin4j 2、實現區域的分頁查詢 3、對分頁代碼重構
模糊查詢:Spring Data JPA 如何進行模糊查詢(LIKE) ?
定義 repos ppi -- data art dao層 sql語句 pos 原文詳見-----> https://blog.csdn.net/czx1204/article/details/79131281 一. 方法一 1. Controller層: 方
Spring Data Jpa框架自定義查詢語句返回自定義實體的解決方案
在使用Spring Data Jpa框架時,根據業務需求我們通常需要進行復雜的資料庫查詢,並返回我們自定義的實體類,而在該框架下,目前僅僅支援返回與資料庫對映進行持久化的POJO實體。雖然在框架上我們可以使用@Query註解執行我們自定義的sql語句,但是其返回值為List<Object[
SpringDataJPA Example條件分頁查詢例項
文章參考了:https://blog.csdn.net/long476964/article/details/79677526 。該文章介紹了 Example 類的用法(中文不好看過來)。 SpringDataJPA官方文件:https://docs.spring.io/spring
多條件分頁查詢
只有繼承JpaSpecificationExecutor<>類,才能多條件分頁查詢。 eg: @Override public Page<OrderHistory> findAll(Pageable pageable, Long userId,
關於mongoTemplate的條件分頁查詢封裝方法
先上實體類 @Document @Data //lombok外掛 public class Profile { @Id private String id; @Indexed
springMVC+spring+mybatis 框架下分頁查詢
一、Mapper.xml(xml) <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://
組合條件分頁查詢
第一種: var url="${pageContext.request.contextPath }/fenYe?currentPage="+pageNumber+"&queryName=${queryName}&queryAddress=${queryAddress}&quer