SpringbootJPA分页 PageRequest过时的替代方法

网友投稿 451 2022-10-20


SpringbootJPA分页 PageRequest过时的替代方法

1. 原因

最近学习spring data JPA 时候要用到分页功能,但是发现网上所有教程都是通过new PageRequest()方法解决分页,实际使用中发现已经过时

2. 解决方案

替代的方法是不要new PageRequest,而是直接用 PageRequest.of这个方法 根据你的需求选择入参

3. 对比

原来:

@Override

@Transactional(readOnly = true) // 只读事务

public Page getPage(Integer pageNum, Integer pageLimit) {

Pageable pageable =new PageRequest(pageNum - 1,pageLimit);

return emr.findAll(pageable);

}

现在:

@Override

@Transactional(readOnly = true) // 只读事务

public Page getPage(Integer pageNum, Integer pageLimit) {

    Pageable pageable =PageRequest.of(pageNum - 1,pageLimit);

    return emr.findAll(pageable);

}

pageRequest随着spring版本的更新变动

2x版本:

/*

* Copyright 2008-2019 the original author or authors.

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* https://apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package org.springframework.data.domain;

import org.springframework.data.domain.Sort.Direction;

import org.springframework.lang.Nullable;

import org.springframework.util.Assert;

/**

* Basic java Bean implementation of {@code Pageable}.

*

* @author Oliver Gierke

* @author Thomas Darimont

*/

public class PageRequest extends AbstractPageRequest {

private static final long serialVersionUID = -4541509938956089562L;

private final Sort sort;

/**

* Creates a new {@link PageRequest} with sort parameters applied.

*

* @param page zero-based page index, must not be negative.

* @param size the size of the page to be returned, must be greater than 0.

* @param sort must not be {@literal null}, use {@link Sort#unsorted()} instead.

*/

protected PageRequest(int page, int size, Sort sort) {

super(page, size);

Assert.notNull(sort, "Sort must not be null!");

this.sort = sort;

}

/**

* Creates a new unsorted {@link PageRequest}.

*

* @param page zero-based page index, must not be negative.

* @param sizehttp:// the size of the page to be returned, must be greater than 0.

* @since 2.0

*/

public static PageRequest of(int page, int size) {

return of(page, size, Sort.unsorted());

}

/**

* Creates a new {@link PageRequest} with sort parameters applied.

*

* @param page zero-based page index.

* @param size the size of the page to be returned.

* @param sort must not be {@literal null}, use {@link Sort#unsorted()} instead.

* @since 2.0

*/

public static PageRequest of(int page, int size, Sort sort) {

return new PageRequest(page, size, sort);

}

/**

* Creates a new {@link PageRequest} with sort direction and properties applied.

*

* @param page zero-based page index, must not be negative.

* @param size the size of the page to be returned, must be greater than 0.

* @param direction must not be {@literal null}.

* @param properties must not be {@literal null}.

* @since 2.0

*/

public static PageRequest of(int page, int size, Direction direction, String... properties) {

return of(page, size, Sort.by(direction, properties));

}

/*

* (non-Javadoc)

* @see org.springframework.data.domain.Pageable#getSort()

*/

public Sort getSort() {

return sort;

}

/*

* (non-Javadoc)

* @see org.springframework.data.domain.Pageable#next()

*/

@Override

public Pageable next() {

return new PageRequest(getPageNumber() + 1, getPageSize(), getSort());

}

/*

* (non-Javadoc)

* @see org.springframework.data.domain.AbstractPageRequest#previous()

*/

@Override

public PageRequest previous() {

return getPageNumber() == 0 ? this : new PageRequest(getPageNumber() - 1, getPageSize(), getSort());

}

/*

* (non-Javadoc)

* @see org.springframework.data.domain.Pageable#first()

*/

@Override

public Pageable first() {

return new PageRequest(0, getPageSize(), getSort());

}

/*

* (non-Javadoc)

* @see java.lang.Object#equals(java.lang.Object)

*/

@Override

public boolean equals(@Nullable Object obj) {

if (this == obj) {

return true;

}

if (!(obj instanceof PageRequest)) {

return false;

}

PageRequest that = (PageRequest) obj;

return super.equals(that) && this.sort.equals(that.sort);

}

/*

* (non-Javadoc)

* @see java.lang.Object#hashCode()

*/

@Override

public int hashCode() {

return 31 * super.hashCode() + sort.hashCode();

}

/*

* (non-Javadoc)

* @see java.lang.ObjeBKhOmjmeXct#toString()

*/

@Override

public String toString() {

return String.format("Page request [number: %d, size %d, sort: %s]", getPageNumber(), getPageSize(), sort);

}

}

1x版本:

/*

* Copyright 2008-2019 the original author or authors.

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* https://apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package org.springframework.data.domain;

import org.springframework.data.domain.Sort.Direction;

/**

* Basic Java Bean implementation of {@code Pageable}.

*

* @author Oliver Gierke

* @author Thomas Darimont

*/

public class PageRequest extends AbstractPageRequest {

private static final long serialVersionUID = -4541509938956089562L;

private final Sort sort;

/**

* Creates a new {@link PageRequest}. Pages are zero indexed, thus providing 0 for {@code page} will return the first

* page.

*

* @param page zero-based page index.

* @param size the size of the page to be returned.

*/

public PageRequest(int page, int size) {

this(page, size, null);

}

/**

* Creates a new {@link PageRequest} with sort parameters applied.

*

* @param page zero-based page index.

* @param size the size of the page to be returned.

* @param direction the direction of the {@link Sort} to be specified, can be {@literal null}.

* @param properties the properties to sort by, must not be {@literal null} or empty.

*/

public PageRequest(int page, int size, Direction direction, String... properties) {

this(page, size, new Sort(direction, properties));

}

/**

* Creates a new {@link PageRequest} with sort parameters applied.

*

* @param page zero-based page index.

* @param size the size of the page to be returned.

* @param sort can be {@literal null}.

*/

public PageRequest(int page, int size, Sort sort) {

super(page, size);

this.sort = sort;

}

/*

* (non-Javadoc)

* @see org.springframework.data.domain.Pageable#getSort()

*/

public Sort getSort() {

return sort;

}

/*

* (non-Javadoc)

* @see org.springframework.data.domain.Pageable#next()

*/

public Pageable next() {

return new PageRequest(getPageNumber() + 1, getPageSize(), getSort());

}

/*

* (non-Javadoc)

* @see org.springframework.data.domain.AbstractPageRequest#previous()

*/

public PageRequest previous() {

return getPageNumber() == 0 ? this : new PageRequest(getPageNumber() - 1, getPageSize(), getSort());

}

/*

* (non-Javadoc)

* @see org.springframework.data.domain.Pageable#first()

*/

public Pageable first() {

return new PageRequest(0, getPageSize(), getSort());

}

/*

* (non-Javadoc)

* @see java.lang.Object#equals(java.lang.Object)

*/

@Override

public boolean equals(final Object obj) {

if (this == obj) {

return true;

}

if (!(obj instanceof PageRequest)) {

return false;

}

PageRequest that = (PageRequest) obj;

boolean sortEqual = this.sort == null ? that.sort == null : this.sort.equals(that.sort);

return super.equals(that) && sortEqual;

}

/*

* (non-Javadoc)

* @see java.lang.Object#hashCode()

*/

@Override

public int hashCode() {

return 31 * super.hashCode() + (null == sort ? 0 : sort.hashCode());

}

/*

* (non-Javadoc)

* @see java.lang.Object#toString()

*/

@Override

public String toString() {

return String.format("Page request [number: %d, size %d, sort: %s]", getPageNumber(), getPageSize(),

sort == null ? null : sort.toString());

}

}

2x版本常用创建实例方式:

调用静态方法

从源码中看到2x版本的构造器是使用protected修饰的,所有无法通过new的方式去创建实例,只能通过调用static修饰的方法进行创建。

1x版本常用创建实例方式:

直接调用构造器即可

因为1x版本使用的是public修饰的构造器,所以可以直接使用构造器创建实例。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小型数据中心的布线设计
下一篇:数据中心建设节能实践
相关文章

 发表评论

暂时没有评论,来抢沙发吧~