使用分页助手实现分页
在pom.xml中引入jar
<!-- mybatis提供的分页助手 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
在 Spring配置文件配置
applicationContext.xml
<!--配置分页助手-->
<property name="plugins">
<array> <!--引入插件类型-->
<bean class="com.github.pagehelper.PageInterceptor"> <!--指定使用的数据库-->
<property name="properties">
<!--因为分页插件支持多种数据库,需指明当前所用数据库,helperDialect mysql数据库(方言)-->
<props>
<prop key="helperDialect">mysql</prop>
</props>
</property>
</bean>
</array>
</property>
或mybatis配置文件中配置
sqlMapConfig.xml
<!--引入分页插件,不用指定数据库方言,mybatis自动选择-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
dao持久层
/**
* 订单Order 持久层
*/
public interface OrderDao {
/**
* 查询所有订单
*
* @return
*/
public List<Order> findAll();
}
配置文件
orderDao.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hp.dao.OrderDao">
<resultMap id="map_order" type="order">
<id property="id" column="id"/>
<result property="orderNum" column="orderNum"/>
<result property="orderTime" column="orderTime"/>
<result property="peopleCount" column="peopleCount"/>
<result property="orderDesc" column="orderDesc"/>
<result property="payType" column="payType"/>
<result property="orderStatus" column="orderStatus"/>
<!--关联属性-->
<association property="product" javaType="product">
<result property="productName" column="productName"/>
</association>
</resultMap>
<!--查询所有订单信息和产品名称-->
<select id="findAll" resultMap="map_order">
select o.*,p.productName from `orders` o left join `product`p on o.productId = p.id
</select>
</mapper>
service业务层接口
/**
* 订单Order 业务层 接口
*/
public interface OrderService {
/**
* TODO 分页助手--分页查询订单信息
*
* @param currPage 当前页
* @param pageSize 每页显示数据的条数
* @return
*/
public PageInfo<Order> findByPage(Integer currPage, Integer pageSize);
}
service业务层实现类
@Service("orderService")
@Transactional //事务注解
public class OrderServiceImpl implements OrderService {
@Resource(name = "orderDao")
private OrderDao orderDao;
@Override
//TODO 分页助手
public PageInfo<Order> findByPage(Integer currPage, Integer pageSize) {
//封装 开始页
PageHelper.startPage(currPage, pageSize);
//获取所有订单信息
List<Order> list = orderDao.findAll();
//创建分页助手中的 分页工具类 (参数1:所有订单的集合 参数2:代表页面显示的页码数量)
PageInfo<Order> pageInfo = new PageInfo<>(list, 5);
return pageInfo;
}
}
Controller控制层
/**
* 订单Order 控制层
*/
@Controller
@RequestMapping("/order")
public class OrderController {
@Resource(name = "orderService")
private OrderService orderService;
@Resource(name = "productService")
private ProductService productService;
/**
* TODO 分页助手 --分页查询所有订单信息和产品名称
*
* @param modelAndView
* @param currPage 当前页
* @param pageSize 每页显示数据的条数
* @return
*/
@RequestMapping("/findAll")
public ModelAndView findAllHelper(ModelAndView modelAndView,
@RequestParam(name = "currPage", defaultValue = "1") Integer currPage,
@RequestParam(name = "pageSize", defaultValue = "5") Integer pageSize) {
PageInfo<Order> pageInfo = orderService.findByPage(currPage, pageSize);
//封装数据
modelAndView.addObject("pageInfo", pageInfo);
//跳转试图 order-list.jsp
modelAndView.setViewName("order-list");
return modelAndView;
}
}
jsp页面
<!--数据列表-->
<form action="${pageContext.request.contextPath}/order/delMore" method="post" id="delForm">
<table id="dataList"
class="table table-bordered table-striped table-hover dataTable">
<thead>
<tr>
<th class="" style="padding-right: 0px;"><input
id="selall" type="checkbox" class="icheckbox_square-blue">
</th>
<th class="sorting_asc">ID</th>
<th class="sorting">订单编号</th>
<th class="sorting">下单时间</th>
<th class="sorting">出行人数</th>
<th class="sorting">支付方式</th>
<th class="sorting">订单状态</th>
<th class="sorting">产品名称</th>
<th class="text-center">操作</th>
</tr>
</thead>
<tbody>
<c:forEach items="${pageInfo.list}" var="order">
<tr>
<td><input name="ids" type="checkbox" value="${order.id}"></td>
<td>${order.id}</td>
<td>${order.orderNum}</td>
<td>
<fmt:formatDate value="${order.orderTime}" pattern="yyyy-MM-dd HH:mm"/>
</td>
<td>${order.peopleCount}</td>
<td>
${order.payType=="0"?"支付宝":order.payType=="1"?"微信":"其他"}
</td>
<td>${order.orderStatus=="0"?"未支付":"已支付"}</td>
<td>${order.product.productName}</td>
<td class="text-center">
<button type="button" class="btn bg-olive btn-xs"
onclick='location.href="${pageContext.request.contextPath}/pages/order-show.jsp"'>
订单
</button>
<button type="button" class="btn bg-olive btn-xs"
onclick='location.href="${pageContext.request.contextPath}/pages/order-show.jsp"'>
查看
</button>
<button type="button" class="btn bg-olive btn-xs"
onclick='delOne(${order.id})'>
删除
</button>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</form>
<!--数据列表/-->
<div class="box-footer">
<div class="pull-left">
<div class="form-group form-inline">
总共${pageInfo.pages} 页,共${pageInfo.total} 条数据。
每页 <select class="form-control" id="pageSize"
onchange="gotoPage(${pageInfo.navigateFirstPage})">
<option value="3">3</option>
<option value="5" selected="selected">5</option>
<option value="10">10</option>
<option value="15">15</option>
<option value="20">20</option>
</select> 条
</div>
</div>
<div class="box-tools pull-right">
<ul class="pagination">
<li><a href="javascript:gotoPage(${pageInfo.navigateFirstPage})"
aria-label="Previous">首页</a></li>
<li><a href="javascript:gotoPage(${pageInfo.prePage})">上一页</a></li>
<c:forEach begin="${pageInfo.navigateFirstPage}" end="${pageInfo.navigateLastPage}" var="i">
<li><a href="javascript:gotoPage(${i})">${i}</a></li>
</c:forEach>
<li><a href="javascript:gotoPage(${pageInfo.nextPage})">下一页</a></li>
<li><a href="javascript:gotoPage(${pageInfo.navigateLastPage})" aria-label="Next">尾页</a>
</li>
</ul>
</div>
</div>
<!--jquery-->
<script type="text/javascript">
$("#pageSize option[value='${pageInfo.pageSize}']").prop("selected", "selected");
function gotoPage(currPage) {
//获取每页显示数据的条目数
var pageSize = $("#pageSize").val();
//判断页数是否小于首页
if (currPage < ${pageInfo.navigateFirstPage}) {
return;
}
//判断页数是否大于总页
if (currPage > ${pageInfo.pages}) {
return;
}
location.href = "${pageContext.request.contextPath}/order/findAll?currPage=" + currPage + "&pageSize=" + pageSize;
}
</script>