Spring Boot 使用MybatisPlus的分页插件

文章详细介绍了如何在SpringBoot项目中结合Thymeleaf模板引擎,利用MybatisPlus的PaginationInnerInterceptor分页插件,配置和实现分页查询功能。通过创建配置类,设置分页拦截器,以及定义实体类、Mapper、Service和Controller,展示了动态分页在Web应用中的基本流程。
摘要由CSDN通过智能技术生成

一、

简易使用thymeleaf 整合springboot 进行分页功能

二、

创建配置类文件 MybatisPageConfig 并引用 MybatisPlus的分页插件 

PaginationInnerInterceptor
@Configuration
public class MybatisPageConfig {
    /**
     * 调用MybatisPlusInterceptor
     * mybatis-plus中的分页查询功能,需要 PaginationInnerInterceptor 分页插件的支持,否则功能不生效
     */
    @Bean
    public MybatisPlusInterceptor paginationInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
        paginationInnerInterceptor.setOverflow(true);//若无下一页 则点击下一页返回第一页
        paginationInnerInterceptor.setMaxLimit(500L);
        mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
        return mybatisPlusInterceptor;
    }

三、

随便创建一个实体类,我这里用Admin类

@Data
@TableName("admin") //指定对应的表
public class Admin {
    private Integer id;
    private String name;
    private Integer age;
    private String email;
}

创建对应的controller、mapper、service及serviceImpl

/**
 * mybatis-plus 只需要继承BaseMapper 就可以拥有CRUD功能 无需mapper.xml
 * 除了复杂的功能以外
 * <这里放我们要操作的对象>
 */
@Mapper
public interface AdminMapper extends BaseMapper<Admin> {
}


/**
 * IService 跟BaseMapper 一样 包含所有的service
 * 只需要填入要操作的对象
 * 也不需要写要调用的方法
 * IService 有许多的方法 直接在controller调用即可
 * 除了一些特殊方法
 */
public interface AdminService extends IService<Admin> {
}


@Service()
public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements AdminService {
}
/**
 * ServiceImpl<>同service接口一样 也不需要写继承的方法
 * AdminMapper 所要用的mapper
 * Admin 所要操作的对象
 * 除了特殊的方法要自己另外写
 */



@Controller
public class AdminController {
    @Autowired
    AdminService adminService;

    @GetMapping("/admin")
    public String dynamic_table(@RequestParam(value = "pn",defaultValue = "1")Integer pn,Model model){
        //@RequestParam(value = "pn",defaultValue = "1")Integer pn 设置页面 默认为1
        List<Admin> list = adminService.list();
//        model.addAttribute("admin",list);
        //分页查询数据 pn代表页码,size表示一页能放几条数据
        Page<Admin> adminPage = new Page<>(pn, 2);
        //分页查询的结果 null表示当前无查询条件
        Page<Admin> page = adminService.page(adminPage,null);
        long current = page.getCurrent();
        long pages = page.getPages();
        long total = page.getTotal();
        List<Admin> records = page.getRecords();
        //因为配置了分页功能 数据就会被功能所调用
        //所有信息就已经在records 里面
        //model.addAttribute("admin",list) 设置了页面 admin的信息也包含在内
        model.addAttribute("page",page);
        return "admin";
    }
}

四、

随便写个简单的html页面,并运用一点thymeleaf的代码

看着很多 随便复制一下就行 哈哈哈

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style type="text/css">
.pure-table {
border-collapse: collapse;
border-spacing: 0;
empty-cells: show;
border: 1px solid #cbcbcb;
}

.pure-table caption {
color: #000;
font: italic 85%/1 arial,sans-serif;
padding: 1em 0;
text-align: center;
}

.pure-table td,.pure-table th {
border-left: 1px solid #cbcbcb;
border-width: 0 0 0 1px;
font-size: inherit;
margin: 0;
overflow: visible;
padding: .5em 1em;
}

.pure-table thead {
background-color: #e0e0e0;
color: #000;
text-align: left;
vertical-align: bottom;
}

.pure-table td {
background-color: transparent;
}
.pure-table-horizontal td,.pure-table-horizontal th {
border-width: 0 0 1px 0;
border-bottom: 1px solid #cbcbcb;
}

.pure-table-horizontal tbody>tr:last-child>td {
border-bottom-width: 0;
}
#nav {
  margin: 50px auto;
  height: 40px;
  background-color: #690;
}
#nav ul {
  list-style: none;
  margin-left: 50px;
}
#nav li {
  display: inline;
}
#nav a {
  line-height: 40px;
  color: #fff;
  text-decoration: none;
  padding: 20px 20px;
}
#nav a:hover {
  background-color: #060;
}
</style>
<body>
<table class="pure-table pure-table-horizontal" style="margin: auto">
  <tr>
    <th>id</th>
    <th>name</th>
    <th>age</th>
    <th>email</th>
  </tr>
  <tr th:each="admin:${page.records}">
    <td th:text="${admin.id}"></td>
    <td th:text="${admin.name}"></td>
    <td th:text="${admin.age}"></td>
    <td th:text="${admin.email}"></td>
  </tr>
</table>
  <div style="text-align: center">当前第[[${page.current}]] 页
  总计 [[${page.pages}]] 页 总计 [[${page.total}]] 条记录
  </div>
  <div>
  <ul id="nav" style="text-align: center">
    <li><a th:href="@{/admin(pn = ${page.current - 1})}">上一页</a></li>
    <li th:class="${num == page.pages?'active':''}" th:each="num:${#numbers.sequence(1,page.pages)}">
      <a th:href="@{/admin(pn = ${num})}">[[${num}]]</a>
    </li>
    <li><a th:href="@{/admin(pn = ${page.current + 1})}">下一页</a></li>
  </ul>
</div>

</body>
</html>

五、

简单的分页功能就完成了,mybatis-plus分页查询的实现原理:
1、由分页拦截器PaginationInnerInterceptor拦截所有查询请求,在执行查询前判断参数中是否包含IPage类型的参数。
2、如果包含IPage类型的参数,则根据分页信息,重新组装成分页查询的SQL。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值