SpringBoot2 实现JPA分页和排序分页的案例

网友投稿 471 2023-02-15

SpringBoot2 实现JPA分页和排序分页的案例

SpringBoot2 实现JPA分页和排序分页的案例

分页

application.yml

spring:

datasource:

url: jdbc:mysql://127.0.0.1/jpa?useUnicode=true&characterEncoding=utf-8&useSSL=false

username: root

password: 123456

driver-class-name: com.mysql.jdbc.Driver

jpa:

hibernate:

# 更新或者创建数据表结构

ddl-auto: update

# 控制台显示SQL

show-sql: true

properties:

hibernate.format_sql: true

实体类

@Entity

@Table(name = "employee")

public class Employee {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Integer empId;

private String lastName;

private String email;

@Temporal(TemporalType.DATE)

private Date birth;

@Temporal(TemporalType.TIMESTAMP)

private Date createTime;

@ManyToOne

@JoinColumn(name = "dept_id")

private Department department;

// 省去 set get方法

}

@Entity

@Table(name = "department")

public class Department {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Integer deptId;

private String deptName;

// 省去 set get方法

}

Repository接口类

import com.springboot.jpa.entity.Employee;

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

public interface EmployeeRepository extends JpaRepository {

}

service 接口类

import com.springboot.jpa.entity.Employee;

import org.springframework.data.domain.Page;

public interface EmployeeService {

// 普通分页

Page getPage(Integer pageNum, Integer pageLimit);

// 排序分页

Page getPageSort(Integer pageNum, Integer pageLimit);

}

Service 实现类

import com.springboot.jpa.dao.EmployeeRepository;

import com.springboot.jpa.entity.Employee;

import com.springboot.jpa.service.EmployeeService;

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.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;

@Service

public class EmployeeServiceImpl implements EmployeeService {

@Autowired

private EmployeeRepository employeeRepository;

// 普通分页

@Override

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

public Page getPage(Integer pageNum, Integer pageLimit) {

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

return employeeRepository.findAll(pageable);

}

// 分页排序

@Override

@Transactional(readOnly = true)

public Page getPageSort(Integer pageNum, Integer pageLimit) {

Sort sort = new Sort(Sort.Direction.DESC,"createTime");

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

return employeeRepository.findAll(pageable);

}

}

Controller控制器类

import com.springboot.jpa.entity.Employee;

import com.springboot.jpa.service.EmployeeService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.domain.Page;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class EmployeeController {

@Autowired

private EmployeeService employeeService;

// 分页显示数据

@GetMapping("/emp")

public Page showPage(@RequestParam(value = "page") Integer page, @RequestParam(value = "size") Integer size){

System.out.println("分页: page:"+page+"; size:"+size);

return employeeService.getPage(page, size);

}

// 排序分页显示数据

@GetMapping("/emp_sort")

public Page showSortPage(@RequestParam(value = "page") Integer page, @RequestParam(value = "size") Integer size){

System.out.println("排序分页: page:"+page+"; size:"+size);

return employeeService.getPageSort(page, size);

}

}

分页显示的json格式串

http://localhost:8080/emp_sort?page=1&size=10 url格式

{

"content": [{

"lastName": "7QW",

"email": "453@qq.com",

"birth": "2018-08-06",

"createTime": "2018-08-30T07:40:34.000+0000",

"id": 5,

"dempartment": {

"deptName": "BBB",

"id": 2

}

}, {

"lastName": "qax",

"email": "1223@qq.com",

"birth": "2018-08-06",

"createTime": "2018-08-24T07:40:56.000+0000",

"id": 6,

"dempartment": {

"deptName": "AAA",

"id": 1

}

}

}],

"pageable": {

"sort": {

"sorted": true,

"unsorted": false

},

"offset": 0,

"pageNumber": 0,

"pageSize": 10,

"unpaged": false,

"paged": true

},

"last": true,

"totalElements": 6,

"totalPages": 1,

"number": 0,

"size": 10,

"sort": {

"sorted": true,

"unsorted": false

},

"numberOfElements": 6,

"first": true

}

补充:Spring Data Jpa普通分页+排序分页

SpringBoot2 使用jpa分页问题

一、 jap的普通分页:

pojo

@Entity

@Table(name = "user")

public class User {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Integer id;

@Column

private String userName;

@Column

private String password;

@Column

private String age;

//省略get、set

IUserService

//jpa简单分页

Page getPage(Integer pageNum,Integer pageSize);

UserService

@Override

public Page getPage(Integer pageNum, Integer pageSize) {

/**

*之前看到别的博主直接new PageRequest(pageNum-1,pageSize)

*自己实践后报错,可能是因为版本不一致吧

*查看PageRequest的底层构造方法并没有对应的只有of方法对应

*后经实验成功!

*/

//创建一个pageable,调用它的实现类PageRequest的of()方法

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

Page userPage = userDao.findAll(pageable);

return userPage;

}

Test

@Test

void testGetPage(){

//调用service层的getPage()方法

Page userPage = userService.getPage(1, 5);

/**

* userPage.getContent()

* getContent(); 获取查询的结果集

* Page常用方法

* List getContent(); 将所有数据返回为List

* long getTotalElements();返回元素总数

* int getTotalPages(); 返回分页总数

*/

List users = userPage.getContent();

for (User user : users) {

System.out.println(user);

}

}

结果:

User{id=17, userName=‘大锤http://', password=‘1***3', age=23}

User{id=18, userName=‘小黑', password=‘w***w', age=21}

User{id=19, userName=‘小白', password=‘2***1', age=29}

User{id=20, userName=‘小红', password=‘4***2', age=19}

User{id=21, userName=‘小芳', password=‘2***3', age=17}

二、 jap的普通分页:

IUserService

同上

UserService

@Override

public Page getPage(Integer pageNum, Integer pageSize) {

//普通查询跟排序查询的唯一区别在于Sort

//排序方式,这里的by()方法跟上面的那个of()方法作用差不多

//Sort.Direction.DESC: 倒序

//Sort.Direction.ASC :默认升序

//Sort.by(Sort.Direction.***, "实体类中的字段");

//根据实体类中的字段进行排序(我使用的"age")

Sort sort = Sort.by(Sort.Direction.DESC, "age");

//创建一个pageable,调用它的实现类PageRequest的of()方法

//将sort加入到of()中排序完成

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

Page userPage = userDao.findAll(pageable);

return userPage;

}

Test

省略单元测试

结果:

User{id=19, name=‘小白', password=‘2***1', age=29}

User{id=16, name=‘老李', password=‘8***7', age=25}

User{id=17, name=‘大锤', password=‘1***3', age=23}

User{id=15, name=‘老宋', password=‘9***0', age=22}

User{id=18, name=‘小黑', password=‘w***w', age=21}

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

上一篇:app 内运行小程序方案(app开发微信小程序)
下一篇:微信小程序唤醒app(微信小程序唤醒微信)
相关文章

 发表评论

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