亚洲色蝴蝶中文娱乐网,在线亚洲欧美一区二区中文字幕,无人视频在线观看视频高清视频,99午夜国产精品一区二区,人人妻人人爽人人狠狠

Springboot data jpa多條件分頁排序查詢

時間:2020-04-14 16:40:27 類型:JAVA
字號:    

網(wǎng)上有很多關系Springboot data jpa多條件分頁排序查詢的例子, 但一般都不是很完整, 有分頁,無排序,有排序,無多排序等,這里分享一個帶多條件,分頁及多排序的一個完整實例, 為了大家完整的查看,這里給出所有的信息, 不省略任何部分

定義實體類:

package com.yt.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Student {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY )
	private int id;
	
	 @Column(name = "names", unique = false, nullable = true, length = 50)
	 private String names;
	 
	 @Column(name = "email", length = 30)
	 private String email;
	 
	 private String sex;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNames() {
		return names;
	}

	public void setNames(String names) {
		this.names = names;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
	 
}

定義Repository接口

package com.yt.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import com.yt.entity.Student;

public interface StudentRepository extends JpaRepository<Student,Integer>,JpaSpecificationExecutor<Student>{

}
//JpaSpecificationExecutor<Student> 這個是為了多條件分頁排序使用,如果只是簡單的增刪改查,就不需要

實現(xiàn)Service層接口

package com.yt.service;
import java.util.List;

import org.springframework.data.domain.Page;

import com.yt.entity.Student;
public interface StuService {
	 Page<Student> findByCondition(Integer page,  Integer size, String names, String sex);
}

實現(xiàn)Service層接口實現(xiàn)類

package com.yt.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
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.domain.Sort.Order;
import org.springframework.data.jpa.domain.Specification;
import javax.persistence.criteria.Predicate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.yt.entity.Student;
import com.yt.repository.StudentRepository;

@Service
public class StuServiceImpl implements StuService{
	@Autowired
	private StudentRepository stuRepository;
	@Override
	public Page<Student> findByCondition(Integer page, Integer size, String names, String sex) {
		//多排序
		List<Order> list=new ArrayList< Order>();
		list.add( new Order(Direction.DESC, "id"));
		list.add( new Order(Direction.ASC, "email"));
		Sort sort = Sort.by(list);
        //Pageable 封裝了分頁的參數(shù),當前頁,每頁顯示的條數(shù),注意:它的當前頁是從0開始的
        Pageable pageable = PageRequest.of(page-1, size, sort);
		Specification<Student> spec = (root, criteriaQuery, criteriaBuilder) -> {
            List<Predicate> predicates = new ArrayList<Predicate>();

           if (!StringUtils.isEmpty(names)){
                predicates.add(criteriaBuilder.like(root.get("names"), "%" + names + "%"));
            }

           if (!StringUtils.isEmpty(sex)){
               predicates.add(criteriaBuilder.like(root.get("sex"), sex));
           }
            //將多條件連接在一起
            return criteriaQuery.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
      };
	  return stuRepository.findAll(spec,pageable);
	}
	
	
}

控制器層調(diào)用:

@RequestMapping(value="findallby")
	public String findByCondition(
			@RequestParam(value = "page", defaultValue = "1") Integer page,
            @RequestParam(value = "size", defaultValue = "10") Integer size,
            @RequestParam(value = "names", defaultValue = "") String names,
            @RequestParam(value = "sex", defaultValue = "") String sex
           )
	{
		 Page<Student> result = stuSer.findByCondition(page, size, names, sex);
		 List<Student> list = result.getContent(); //所有的數(shù)據(jù)
		 Long totals = result.getTotalElements(); //總條數(shù)
		 int  pages  = result.getTotalPages();    //總頁數(shù)
         System.out.println("共有" + pages + "頁, " + totals + "條");
         for(Student s:list) {
        	 System.out.println(s.getNames() + "  "+ s.getId());
         }
		return "已經(jīng)實現(xiàn)了多條件分頁排序查詢";
	}

瀏覽器訪問,控制臺如下

http://localhost:8080/stu/findallby?page=1&names=hi

Hibernate: select student0_.id as id1_0_, student0_.email as email2_0_, student0_.names as names3_0_, student0_.sex as sex4_0_ from student student0_ where student0_.names like ? order by student0_.id desc limit ?

共有1頁, 3條

hibername  48

hibername  47

hibername  46


JpaRepository 簡單條件查詢


<