spring-data-jpa分页问题

小昭归来 发布于 2015/05/19 10:35
阅读 4K+
收藏 0

在官网没看到spring-data-jpa分页使用的栗子,所有不太会用。

Page<Course> findCourseSortByHot(Pageable pageable);

spring-data-jpa在发出sql语句时,是根据方法名中的SortByHot呢还是根据Pageable中设置的sort,发出sql语句呢?

@Query ("  ")

Page<Course> findCourseSortByHot1(Pageable pageable);

使用@Query后,调用改方法时是只执行@Query后的sql语句还是配合着Pageable一起再生成语句呢?

否则这里的Pageable是如何作用的呢?

用过的各位,帮忙解答下,或是有分页栗子的给个链接参考下,多谢啦

加载中
1
渔樵耕读
渔樵耕读
public Page<Projectsort> findAll(Specification<Projectsort> spec, Pageable page);

Specification<Projectsort> spec = getWhere(search);
		PageRequest request = new PageRequest(num - 1, size,
				Sort.DEFAULT_DIRECTION.DESC, "projectsortserial");
		Page<Projectsort> pageList = sortRepo.findAll(spec, request);

private Specification<Projectsort> getWhere(final SortSearch search) {
		return new Specification<Projectsort>() {

			@Override
			public Predicate toPredicate(Root<Projectsort> root,
					CriteriaQuery<?> query, CriteriaBuilder builder) {
				List<Predicate> predicate = new ArrayList<Predicate>();
				if (search.getMattertype() != null) {
					predicate.add(builder.equal(root.get("mattertype"),
							search.getMattertype()));
				}
				if (search.getSerial() != null) {
					predicate.add(builder.equal(root.get("projectsortserial"),
							search.getSerial()));
				}
				if (search.getDepId() != null) {
					predicate.add(builder.equal(root.get("departmentid"),
							search.getDepId()));
				}
				if (search.getProjectsortname() != null) {
					predicate.add(builder.like(
							(Path) root.get("projectsortname"),
							"%" + search.getProjectsortname() + "%"));
				}
				predicate.add(builder.equal(root.get("useflag"),
						search.getUserFlag()));
				predicate.add(builder.equal(root.get("delflag"),
						search.getDelFlag()));
				Predicate[] pre = new Predicate[predicate.size()];
				return query.where(predicate.toArray(pre)).getRestriction();
			}
		};
	}


class SortSearch {
		private String mattertype;
		private String serial;
		private String sortName;
		private String userFlag;
		private String delFlag;
		private String depId;
		private String projectsortname;

		public String getProjectsortname() {
			return projectsortname;
		}

		public void setProjectsortname(String projectsortname) {
			this.projectsortname = projectsortname;
		}

		public String getDepId() {
			return depId;
		}

		public void setDepId(String depId) {
			this.depId = depId;
		}

		public String getUserFlag() {
			return userFlag;
		}

		public void setUserFlag(String userFlag) {
			this.userFlag = userFlag;
		}

		public String getDelFlag() {
			return delFlag;
		}

		public void setDelFlag(String delFlag) {
			this.delFlag = delFlag;
		}

		public String getMattertype() {
			return mattertype;
		}

		public void setMattertype(String mattertype) {
			this.mattertype = mattertype;
		}

		public String getSerial() {
			return serial;
		}

		public void setSerial(String serial) {
			this.serial = serial;
		}

		public String getSortName() {
			return sortName;
		}

		public void setSortName(String sortName) {
			this.sortName = sortName;
		}

	}


if (pageList != null && pageList.getSize() > 0) {
			Iterator<Projectsort> it = pageList.iterator();
			while (it.hasNext()) {
				Projectsort sort = it.next();

				//获取结果集 循环操作
				}
			}
		}



1
渔樵耕读
渔樵耕读

排版实在是。。。

说下思路吧(带约束条件的情况)

首先 定义Repository 的方法 参数是Specification(可变约束条件) 和 Pageable

在service中定义PageRequest 来说明 页数 条数和排序的字段

然后定义Specification 的约束类

将pageRequest和Specification 传入方法 获取Page<T>  这个Page其实是一个集合 你直接循环他就可以了~ 

分页参考:http://springinpractice.com/2012/05/11/pagination-and-sorting-with-spring-data-jpa

动态约束查看http://www.itjavaer.com/article/35


0
莲莲莲

第一种,没那样用过,一般排序也放Pageable;

第二种,会配合Pageable生成分页数据。

返回顶部
顶部