//工具类,增删改查等等
package com.yunqing.service.impl; import java.util.Map; 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.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.transaction.annotation.Transactional;
import org.springside.modules.persistence.DynamicSpecifications;
import org.springside.modules.persistence.SearchFilter; public class RootServiceImpl<T> { @Autowired
PagingAndSortingRepository<T, String> pasr; @Autowired
JpaSpecificationExecutor<T> jpas; /**
* 根据条件查询
* @param paramMap
* @param page
* @param rows
* @param clazz
* @return
*/
@Transactional(readOnly=true)
public Page<T> findAllByParam(Map<String, Object> paramMap, int page,int rows,Class<T> clazz) {
Map<String, SearchFilter> filters = SearchFilter.parse(paramMap);
Specification<T> spec = DynamicSpecifications.bySearchFilter(filters.values(),clazz);
Pageable pageable = new PageRequest(page, rows);
Page<T> resultPage = jpas.findAll(spec,pageable);
return resultPage;
}
/**
* 根据ID查询
* @param id
* @return
*/
//@Transactional(readOnly=true)
public T findEntityById(String id){
T t=pasr.findOne(id);
return t;
}
/**
* 查询全部
* @return
*/
@Transactional(readOnly=true)
public Iterable<T> findAllEntity(){
Iterable<T> list=pasr.findAll();
return list;
} /**
* 删除
* @param id
*/
@Transactional
public void deleteEntityById(String id){
pasr.delete(id);
}
/**
* 删除
* @param t
*/
@Transactional
public void deleteEntity(T t){
pasr.delete(t);
}
/**
* 删除多个
* @param ids
*/
@Transactional
public void deleteEntity(Iterable<T> iterable){
pasr.delete(iterable);
} /**
* 保存
* @param t
*/
@Transactional
public void save(T t){
pasr.save(t);
}
/**
* 保存
* @param tList
*/
@Transactional
public void save(Iterable<T> tList){
pasr.save(tList);
}
/**
* 删除多个/单个
* <b>deleteEntity</b>
* <p><b>详细说明:</b></p>
*
*@param ids
*/
@Transactional
public void deleteEntity(String ids){
if(ids!=null&&!"".equals(ids)){
if(ids.contains(":")){
String[] idArr = ids.split(":");
for(String id : idArr){
deleteEntityById(id);
}
}else{
deleteEntityById(ids);
}
}
}
@Transactional
public Page<T> findAllByParam(Map<String, Object> paramMap, int page,int rows,Class<T> clazz,Sort sort) {
Map<String, SearchFilter> filters = SearchFilter.parse(paramMap);
Specification<T> spec = DynamicSpecifications.bySearchFilter(filters.values(),clazz);
Pageable pageable = new PageRequest(page, rows,sort);
Page<T> resultPage = jpas.findAll(spec,pageable);
return resultPage;
}
}

service层

package com.yunqing.service.impl;

import java.util.Map;

import javax.transaction.Transactional;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import com.tideway.live.vo.Student;
import com.tideway.utils.FileUtil; @Service("/studentService")
public class StudentServiceImpl extends RootServiceImpl<Student>{
//查询所有的学生,先排序后查询!!!!!!!!!!!!sort是排序条件参数,在controller层给参数赋值
public Page<Student> queryStudentList(Map<String, Object> paramMap, int page, int rows,Sort sort) {
// TODO Auto-generated method stub
//Page<Student> esultPage = findAllByParam(paramMap, page, rows,Student.class);
Page<Student> esultPage=findAllByParam(paramMap, page, rows, Student.class,sort);
return esultPage;
}
}

controller层

package com.yunqing.controller;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.collections4.map.HashedMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile; import com.tideway.live.service.impl.StudentServiceImpl;
import com.tideway.live.vo.Student;
import com.tideway.utils.FileUtil; @Controller
@RequestMapping("/student")
public class StudentController extends BaseController{ @InitBinder("student")
public void initBinder(WebDataBinder binder) {
binder.setFieldDefaultPrefix("student.");
} @Autowired
private StudentServiceImpl studentService; /**
* 获取学员列表
* @param request
* @param response
* @param student
*/
@RequestMapping("/queryStudentList")
public void queryStudentList(HttpServletRequest request,HttpServletResponse response,@ModelAttribute("student") Student student){
Map<String, Object> paramMap = new HashedMap<String, Object>();
if(student.getName()!=null&&!"".equals(student.getName())){
paramMap.put("LIKE_name", student.getName());
}
//直接创建sort对象,通过排序方法和属性名
Sort sort=new Sort(Direction.DESC,"createTime");//createTime是学生的录入时间,这样展示的时候就会按录入时间先排序再分页展示。
//Page<Student> page = studentService.queryStudentList(paramMap,this.getPage(request), this.getRows(request));
Page<Student> page = studentService.queryStudentList(paramMap, this.getPage(request), this.getRows(request),sort);
List<Student> list = page.getContent();
Map<String, Object> json = new HashMap<String, Object>();
json.put("total",page.getTotalElements());
json.put("rows",list);
returnJson(response,json);
}
}

也可以在service层搞定,还可以实现先多条件排序在分页。

public Page<SpecialguardInfo> findAllByParam(Map<String, Object> paramMap, int page, int rows) {
// 先根据状态倒序排列,再根据创建时间倒序排序,再分页。
List<Order> orders=new ArrayList<Sort.Order>();
orders.add(new Order(Direction.DESC, "_state"));
orders.add(new Order(Direction.DESC, "createtime"));
//Sort sort = new Sort(Sort.Direction.DESC,"createtime");
Page<SpecialguardInfo> page1=findAllByParam(paramMap, page, rows, SpecialguardInfo.class, new Sort(orders));//注意参数要修改成这样
return page1;
}

更多精彩文章欢迎关注公众号“Java之康庄大道”

Spring data JPA先排序再分页。的更多相关文章

  1. 【Spring Data 系列学习】Spring Data JPA 自定义查询,分页,排序,条件查询

    Spring Boot Jpa 默认提供 CURD 的方法等方法,在日常中往往时无法满足我们业务的要求,本章节通过自定义简单查询案例进行讲解. 快速上手 项目中的pom.xml.application ...

  2. spring data jpa Specification 复杂查询+分页查询

    当Repository接口继承了JpaSpecificationExecutor后,我们就可以使用如下接口进行分页查询: /** * Returns a {@link Page} of entitie ...

  3. spring data jpa实现多条件查询(分页和不分页)

    目前的spring data jpa已经帮我们干了CRUD的大部分活了,但如果有些活它干不了(CrudRepository接口中没定义),那么只能由我们自己干了.这里要说的就是在它的框架里,如何实现自 ...

  4. 使用Spring Data JPA进行数据分页与排序

    一.导读 如果一次性加载成千上万的列表数据,在网页上显示将十分的耗时,用户体验不好.所以处理较大数据查询结果展现的时候,分页查询是必不可少的.分页查询必然伴随着一定的排序规则,否则分页数据的状态很难控 ...

  5. 整合Spring Data JPA与Spring MVC: 分页和排序

    之前我们学习了如何使用Jpa访问关系型数据库.比较完整Spring MVC和JPA教程请见Spring Data JPA实战入门,Spring MVC实战入门. 通过Jpa大大简化了我们对数据库的开发 ...

  6. 整合Spring Data JPA与Spring MVC: 分页和排序pageable

    https://www.tianmaying.com/tutorial/spring-jpa-page-sort Spring Data Jpa对于分页以及排序的查询也有着完美的支持,接下来,我们来学 ...

  7. spring data jpa 分页查询

    https://www.cnblogs.com/hdwang/p/7843405.html spring data jpa 分页查询   法一(本地sql查询,注意表名啥的都用数据库中的名称,适用于特 ...

  8. Spring MVC和Spring Data JPA之按条件查询和分页(kkpaper分页组件)

    推荐视频:尚硅谷Spring Data JPA视频教程,一学就会,百度一下就有, 后台代码:在DAO层继承Spring Data JPA的PagingAndSortingRepository接口实现的 ...

  9. Spring Data Jpa:分页、Specification、Criteria

    分页的主要接口与类 PagingAndSortingRepository 继承自 CrudRepository 接口,提供了排序以及分页查询能力,提供了两个方法 Iterable<T> f ...

随机推荐

  1. Spring 数据传入

    表单传入 前端代码: <form method="POST" id="user_login_submit"> <div class=" ...

  2. java导入excle表格,并且对表格进行相应的修改,并对表格数据进行整理,最后导出本地表格等一系列操作

    1.首先创建一个java项目 完成效果如下图所示 2.导入以下jar包 3.代码如下 其中行和列的操作是根据需求自动划分的 public class auto_date { private stati ...

  3. Found 1 slaves: Use of uninitialized value in printf at /usr/local/percona-toolkit/bin/pt-online-schema-change line 8489

    1. problem description: as the title show, i miss the first problem using pt-online-schema-change to ...

  4. cf1043C. Smallest Word(贪心)

    题意 题目链接 Sol 这题打cf的时候真的是脑残,自己造了个abcdad的数据开心的玩了半天一脸懵逼...最后还好ycr大佬给了个思路不然就凉透了... 首先不难看出我们最后一定可以把字符串弄成\( ...

  5. jquery each() 方法跳出循环

    1.jquery each() 方法  return false: 的时候  相当于  break; 跳出整个循环: 2.jquery each() 方法  return true: 的时候  相当于 ...

  6. GIS与FVCOM模型耦合的关键技术及解决思路

    1. FVCOM本身为Linux下的MPI程序,首先将其移植到Windows下,可以编译成控制台程序. 2. FVCOM的前处理由GIS完成剖分网格和初始设定等工作. 3. FVCOM的输出采用自定义 ...

  7. 面试准备之三Django知识

    Django请求流程 MTV模式 路由 视图 ORM 模板

  8. js 显示 base64编码 的二进制流 图片

    Data URI scheme.Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入.比如上面那串字符,其实是一张小图片,将这些字 ...

  9. python wsgi PEP333 中文翻译

    PEP 333 中文翻译 首先说明一下,本人不是专门翻译的,英文水平也不敢拿来献丑.只是这是两年前用python的时候为了自己学习方便而翻译的,记录着笔记自己看看而已.最近翻出来看看觉得还是放出来吧. ...

  10. SQL日期转换

    SQL 语句日期用法及函数 --DAY().MONTH().YEAR()——返回指定日期的天数.月数.年数: select day(cl_s_time) as '日' from class  --返回 ...