基于MyBatis分页插件的简解
一、在spring配置文件中配置分页插件
在Spring配置MyBatis中配置分页插件
<!-- 配置Mybatis-->
<!-- 配置SqlSessionFactoryBean,可以直接在Spring的IOC中获取SqlSessionFactory-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 设置MyBatis的核心配置文件的路径-->
<property name="dataSource" ref="dataSouerce"></property>
<!-- 设置Mybatis数据源-->
<property name="configLocation" value="classpath:maybatis-cofng.xml"></property>
<!-- 设置映射文件的路径 mapper下的所有xml, 只有映射文件的包和mapper接口的包不一致时候才需要设置-->
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
<!-- 配置分页插件-->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor"></bean>
</array>
</property>
</bean>
二、在@Service中实现分页方法
PageHelper.startPage(pageNum,4)开启分页功能 ,设置当前页码的列数
List<Employee> list=employeeMapper.getAllEmployee(); //查询所有数据
PageInfo<Employee> page=new PageInfo<>(list,3);//把数据进行分页处理,设置导航分页长度为3
@Service
@Transactional //事务作用与类的所有方法
public class EnmployeeServerImp implements EnmployeeServer {
@Autowired
private EmployeeMapper employeeMapper; //相对于dao
@Override
public List<Employee> getAllEmployee() {
return employeeMapper.getAllEmployee();
}
@Override //分页功能
public PageInfo<Employee> getEmployeege(Integer pageNum) {
//开启分页功能 会影响下面的查询语句 (设置 当前页码 每页条数)
PageHelper.startPage(pageNum,4);
//查询所有数据
List<Employee> list=employeeMapper.getAllEmployee();
// 把数据分页 导航页的原点
PageInfo<Employee> page=new PageInfo<>(list,3);
return page;
}
}
三、在@Controller层编写消息接收方法
创建PageInfo 实现类接收分好页的数据
//分页查询
@RequestMapping(value = "/employee/page/{pageNum}",method = RequestMethod.GET)
public String getAllEmployeePage(@PathVariable("pageNum") Integer pageNum,Model model){
//获取员工的分页信息 将页码获取分页数据
PageInfo<Employee> page=enmployeeServer.getEmployeege(pageNum);
//将分页数据共享到请求域中
model.addAttribute("page",page);
return "Employee_page";
}
//查询所有员工
@RequestMapping(value = "/employee",method = RequestMethod.GET)
public String getAllEmployee(Model model){
//查询员工信息
List<Employee> list= enmployeeServer.getAllEmployee();
//将员工信息在请求域共享
model.addAttribute("list",list);
return "Employee_list";
}
PageInfo{ pageNum=8, pageSize=4, size=2, startRow=29, endRow=30, total=30, pages=8, list=Page{count=true, pageNum=8, pageSize=4, startRow=28, endRow=32, total=30, pages=8, reasonable=false, pageSizeZero=false}, prePage=7, nextPage=0, isFirstPage=false, isLastPage=true, hasPreviousPage=true, hasNextPage=false, navigatePages=5, navigateFirstPage4, navigateLastPage8, navigatepageNums=[4, 5, 6, 7, 8] }
list: 当前页的数据
pageNum:当前页的页码
pageSize:每页显示的条数
size:当前页显示的真实条数
total:总记录数
pages:总页数
prePage:上一页的页码
nextPage:下一页的页码
isFirstPage/isLastPage:是否为第一页/最后一页
hasPreviousPage/hasNextPage:
是否存在上一页/下一页
navigatePages:导航分页的页码数
navigatepageNums:导航分页的页码,[1,2,3,4,5]
四、在逻辑视图中使用分页数据
<div style="text-align: center">
<!-- 判断是否发首页-->
<a th:if="${page.hasPreviousPage}" th:href="@{/employee/page/1}">首页</a>
<!-- 判断是否是首页 其他不显示-->
<a th:if="${page.hasPreviousPage}" th:href="@{'/employee/page/'+${page.prePage}}">上一页</a>
<!-- 导航分页-->
<span th:each="num : ${page.navigatepageNums}">
<!-- 当前页面为目标页面时为红色且【】围绕-->
<a th:if="${page.pageNum==num}" style="color: red" th:href="@{'/employee/page/'+${num}}" th:text="'['+${num}+']'"></a>
<!-- 当前页面为不是目标页面只是显示-->
<a th:if="${page.pageNum!=num}" th:href="@{'/employee/page/'+${num}}" th:text="${num}"></a>
</span>
<a th:if="${page.hasNextPage}" th:href="@{'/employee/page/'+${page.nextPage}}">下一页</a>
<a th:if="${page.hasNextPage}" th:href="@{'/employee/page/'+${page.pages}}">末页</a>
</div>
五、效果图