下面是 SpringBoot 中 MyBatisPlus 使用 IPage 和 Page 分页的实例代码完整攻略。
1. 添加 MyBatisPlus 依赖
首先,需要在 pom.xml 文件中添加 MyBatisPlus 依赖:
<!-- MyBatis-Plus 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.1</version>
</dependency>
2. 配置分页插件
在 SpringBoot 中,需要在 MyBatisPlus 的配置类中配置分页插件:
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
3. 使用 IPage 进行分页操作
在使用 MyBatisPlus 进行分页操作时,可以使用 IPage 接口来实现。例如:
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public IPage<User> selectUserPage(Page<User> page) {
return this.baseMapper.selectPage(page, null);
}
}
在上面的例子中,我们直接调用了 selectPage 方法进行分页查询,并将结果封装在 IPage 接口中。
4. 使用 Page 进行分页操作
除了使用 IPage 接口,MyBatisPlus 还提供了另外一个分页接口 Page,可以更加灵活地进行分页操作。
例如:
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public Page<User> selectUserPage(int pageNum, int pageSize) {
Page<User> page = new Page<>(pageNum, pageSize);
QueryWrapper<User> wrapper = new QueryWrapper<>();
// 添加查询条件
wrapper.eq("status", 1);
return this.baseMapper.selectPage(page, wrapper);
}
}
在上面的例子中,我们先创建了一个 Page 对象,然后设置了分页查询的页码和每页数量,接着使用 QueryWrapper 来添加查询条件,最后调用 selectPage 方法进行分页查询。
示例一:基于 IPage 进行分页操作
下面是一个示例,展示如何基于 IPage 接口完成分页操作。
从数据库中获取用户列表,然后分页显示到 SpringBoot 的 Web 页面上。
- 首先,在 User 实体类中添加一个用于分页查询的属性(不用手动添加 getter 和 setter 方法):
public class User {
private Long id;
private String name;
private Integer age;
// 分页查询的属性
private Integer currentPage;
private Integer pageSize;
// Getter and Setter ...
}
- 然后,在 UserService 接口中添加分页查询的方法:
public interface UserService {
IPage<User> getUserListByPage(User user);
}
- 在 UserServiceImpl 中实现 getUserListByPage 方法:
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public IPage<User> getUserListByPage(User user) {
// 构造分页参数
IPage<User> page = new Page<>(user.getCurrentPage(), user.getPageSize());
// 构造查询条件
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("name", user.getName());
wrapper.ge("age", user.getAge());
// 执行查询,并返回分页结果
return this.baseMapper.selectPage(page, wrapper);
}
}
在上面的代码中,首先创建了一个 Page 对象,并设置了分页参数,然后使用 QueryWrapper 构造查询条件。最后调用 selectPage 方法进行分页查询,并将查询结果封装在 IPage 中返回。
- 在 Controller 层中添加分页查询的接口,
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/list")
public IPage<User> getUserListByPage(User user) {
return userService.getUserListByPage(user);
}
}
- 最后,在前端页面显示分页结果。
下面是一个简单的示例,使用 jQuery 在前端页面显示分页数据:
$(function() {
// 初始化分页数据
var currentPage = 1;
var pageSize = 5;
var total = 0;
// 分页函数
function pagination(pageNum, pageSize) {
$.get("/user/list", {
currentPage: pageNum,
pageSize: pageSize
},
function(data) {
var list = data.records;
var html = "";
for (var i = 0; i < list.length; i++) {
var user = list[i];
html += "<tr>";
html += "<td>" + user.id + "</td>";
html += "<td>" + user.name + "</td>";
html += "<td>" + user.age + "</td>";
html += "</tr>";
}
// 显示分页数据
$("#tbody").html(html);
currentPage = data.current;
pageSize = data.size;
total = data.total;
// 显示分页信息
$("#page-info").text("当前第 " + currentPage + " 页,共 " + total + " 条记录");
});
}
// 初始化并显示分页数据
pagination(currentPage, pageSize);
// 绑定翻页事件
$("#pagination").createPage({
pageCount: Math.ceil(total / pageSize),
current: currentPage,
backFn: function(pageNum) {
pagination(pageNum, pageSize);
}
});
});
在上面的代码中,我们使用 $.get 方法异步请求后端接口,然后将返回的分页数据显示到列表中,并使用 jQuery plugins 创建分页组件,在用户点击分页按钮时重新请求后端接口,并更新数据和分页信息。
示例二:基于 Page 进行分页操作
下面是一个示例,展示如何基于 Page 接口完成分页操作。
从数据库中获取商品列表,然后分页显示到 SpringBoot 的 Web 页面上。
- 首先,在 Product 实体类中添加一个用于分页查询的属性:
public class Product {
private String id;
private String name;
private BigDecimal price;
private Integer stock;
// 分页查询的属性
private Integer pageNum;
private Integer pageSize;
// Getter and Setter ...
}
- 然后,在 ProductService 接口中添加分页查询的方法:
public interface ProductService {
Page<Product> getProductListByPage(Product product);
}
- 在 ProductServiceImpl 中实现 getProductListByPage 方法:
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
@Override
public Page<Product> getProductListByPage(Product product) {
// 构造分页参数
Page<Product> page = new Page<>(product.getPageNum(), product.getPageSize());
// 构造查询条件
QueryWrapper<Product> wrapper = new QueryWrapper<>();
wrapper.like("name", product.getName());
wrapper.ge("price", product.getPrice());
// 执行查询,并返回分页结果
return this.baseMapper.selectPage(page, wrapper);
}
}
在上面的代码中,首先创建了一个 Page 对象,并设置了分页参数,然后使用 QueryWrapper 构造查询条件。最后调用 selectPage 方法进行分页查询,并将查询结果封装在 Page 中返回。
- 在 Controller 层中添加分页查询的接口,
@RestController
public class ProductController {
@Autowired
private ProductService productService;
@GetMapping("/product/list")
public Page<Product> getProductListByPage(Product product) {
return productService.getProductListByPage(product);
}
}
- 最后,在前端页面显示分页结果。
下面是一个简单的示例,使用 layui 在前端页面显示分页数据:
layui.use(['table', 'laypage'], function() {
var table = layui.table;
var laypage = layui.laypage;
// 初始化分页数据
var pageNum = 1;
var pageSize = 5;
var total = 0;
// 分页函数
function pagination(pageNum, pageSize) {
$.get("/product/list", {
pageNum: pageNum,
pageSize: pageSize
},
function(data) {
table.render({
elem: '#table',
data: data.records,
cols: [
[{
field: 'id',
title: 'ID',
}, {
field: 'name',
title: '商品名称',
}, {
field: 'price',
title: '商品价格',
}, {
field: 'stock',
title: '库存量',
}]
]
});
pageNum = data.current;
pageSize = data.size;
total = data.total;
// 显示分页信息
laypage.render({
elem: 'pagination', // 分页容器
count: total, // 数据总数
limit: pageSize, // 每页显示的条数
curr: pageNum, // 当前页码
layout: ['prev', 'page', 'next', 'skip', 'limit'],
groups: 2,
jump: function(obj, first) {
if (!first) {
pagination(obj.curr, obj.limit);
}
}
});
});
}
// 初始化并显示分页数据
pagination(pageNum, pageSize);
});
在上面的代码中,我们使用 layui 的 table 组件在前端页面显示表格,并使用 $.get 方法异步请求后端接口,然后将返回的分页数据显示到表格中,并使用 layui 的 laypage 组件创建分页组件,在用户点击分页按钮时重新请求后端接口,并更新数据和分页信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot中MyBatisplus使用IPage和Page分页的实例代码 - Python技术站