一、
简易使用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。