springboot jpa分页中给对象添加新属性

在springboot开发中,我们经常会使用到Jpa的Page来进行分页操作。

通过Jpa的pageable对象可以获取到Page<>列表,这个对象包含了所需要的数据以及分页信息。但是我们可能会遇到这样的问题:

从数据库中获取到的对象,我们需要给每个对象添加一个属性值,用于在页面中显示。这时就会想到新建一个实体类,用于保存这些数据:

原始类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Test {

private long id;
private String name;

public long getId(){
return id;
}
public void setId (long id) {
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}

1.创建新的实体类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class TestNew {

private long id;
private String name;
private Integer age;

public long getId(){
return id;
}
public void setId (long id) {
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public Integer getAge(){
return age;
}
public void setAge(Integer age){
this.age = age;
}
}

2.从原有的page中获取content并修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
List<Test> testList = pageOld.getContent();

List<TestNew> testNewList = new LinkedList<TestNew>();

for (Test test : testList ) {

TestNew testNew = new TestNew();
testNew.setId(test.getId());
testNew.setName(test.getName());
testNew.setAge(18);

testNewList.add(testNew);
}

3.构造新的page:

1
Page<TestNew> pageNew = new PageImpl(testNewList);

4.然而,这样构造的page是有问题的:在页面展示的时候,发现只有第一页。于是经过对比排查,发现新构造的page中有个totalElements字段等和原有的值是不一样的。经过查询page类的api发现其还有另一个构造函数,其中就包含了总条数等属性:

1
Page<TestNew> pageNew = new PageImpl(testNewList, new PageRequest(pageOld.getNumber(), pageOld.getSize()), pageOld.getTotalElements());

5.这样才算大功告成了!

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2023 高行行
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信