[java学习] Spring的分页插件的使用
概述:SSM集成常会使用到分页,Spring中提供了方便实用的分页插件
第一步:在Mybatis配置文件(SqlMapConfig.xml)中配置插件组件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
</configuration>
第二步:在实体类中设置价格区间(lprice,hprice)
//高价格
private Integer hprice;
//低价格
private Integer lprice;
public void setHprice(Integer hprice) {
this.hprice = hprice;
}
public Integer getHprice() {
return hprice;
}
public Integer getLprice() {
return lprice;
}
public void setLprice(Integer lprice) {
this.lprice = lprice;
}
第三步:在mapper层设置
《Interface》
List<ProductInfo> selectAllByCon(ProductInfo productInfo);
//根据类型查询商品信息(将价格区间等信息,已经封装到了productInfo对象中)
《xml文件-- 加装组合查询》
<select id="selectAllByCon" parameterType="com.qiang.ssm.entity.ProductInfo" resultMap="BaseResultMapdemo1">
select * from product_info <include refid="conn"></include>
</select>
<resultMap id="BaseResultMapdemo1" type="com.qiang.ssm.entity.ProductInfo" >
<id column="p_id" property="pId" jdbcType="INTEGER" />
<result column="p_name" property="pName" jdbcType="VARCHAR" />
<result column="p_content" property="pContent" jdbcType="VARCHAR" />
<result column="p_price" property="pPrice" jdbcType="INTEGER" />
<result column="p_image" property="pImage" jdbcType="VARCHAR" />
<result column="p_number" property="pNumber" jdbcType="INTEGER" />
<result column="type_id" property="typeId" jdbcType="INTEGER" />
<result column="p_date" property="pDate" jdbcType="DATE" />
</resultMap>
因为我的多条件组合查询 是有产品的名字,类型以及价格区间等信息
<sql id="conn">
<where>
1=1
<if test="pName!=null and pName!=''">
and p_name like '%${pName}%'
</if>
<if test="typeId!=null">
and type_id=#{typeId}
</if>
<if test="pPrice!=null">
and p_price between #{lprice} and #{hprice}
</if>
order by p_id desc
</where>
</sql>
第四步:service层:
/**
* 分页查询和多条件组合查询
* @param pagenum 当前显示的页号
* @param pageSize 每页显示的项目数
* @param productInfo 产品对象
* @return
*/
@Override
public PageInfo<ProductInfo> selectAllByCondition(Integer pagenum, Integer pageSize,ProductInfo productInfo) {
在调用sql查询前调用,告诉其查询的起始页和每页条数
PageHelper.startPage(pagenum,pageSize);
按条件查询
List<ProductInfo> list=productInfoMapper.selectAllByCon(productInfo);
//将按条件查询的数据封装到分页对象中
PageInfo<ProductInfo> pageInfo=new PageInfo<>(list);
return pageInfo;
}
第五步:controller 层:
/**
*controller的按条件查询和分页,在该层将前端传来的数据,封装并传给对象
* @param session
* @param pname
* @param typeid
* @param lprice
* @param hprice
* @param model
* @return
*/
@RequestMapping("mySplict")
public String mySplict(HttpSession session,String pname,Integer typeid,Integer lprice,Integer hprice,Model model){
//从前端传来的数据封装一下
ProductInfo productInfo=new ProductInfo();
productInfo.setpName(pname);
productInfo.setTypeId(typeid);
productInfo.setLprice(lprice);
productInfo.setHprice(hprice);
//用于数据回显
session.setAttribute("vo",productInfo);
//调用service层的方法,获取到分页信息
PageInfo<ProductInfo> pageInfo = productInfoService.selectAllByCondition(1, 5, productInfo);
输出测试一下
System.out.println("**********"+pageInfo.getSize());
//将结果放到前端页面中,前端页面便可以直接进行获取
model.addAttribute("pb",pageInfo);
return "product";
}
第六步:前端界面(辅助作用)
//在该部分进行填写
<div id="condition" style="text-align: center">
<form id="myform" action="${pageContext.servletContext.contextPath}/prod/mySplict.action" method="post">
商品名称:<input name="pname" id="pname" value="${sessionScope.vo.pName}">
商品类型:<select name="typeid" id="typeid">
<option value="-1">请选择</option>
<c:forEach items="${sessionScope.ptlist}" var="pt">
<option value="${pt.typeId}" ${pt.typeId==sessionScope.vo.typeId ? "selected":""} >
${pt.typeName}
</option>
</c:forEach>
</select>
价格:<input name="lprice" id="lprice" value="${sessionScope.vo.lprice}">-
<input name="hprice" id="hprice" value="${sessionScope.vo.hprice}">
<input type="submit" value="查询" />
</form>
</div>
// 在该部分显示结果:
<div id="middle">
<table class="table table-bordered table-striped">
<tr>
<th>商品名</th>
<th>商品介绍</th>
<th>定价(元)</th>
<th>商品图片</th>
<th>商品数量</th>
<th>操作</th>
</tr>
<c:forEach items="${pb.list}" var="p">
<tr>
<td>${p.pName}</td>
<td>${p.pContent}</td>
<td>${p.pPrice}</td>
<td><img width="55px" height="45px"
src="${pageContext.request.contextPath}/image_big/${p.pImage}"></td>
<td>${p.pNumber}</td>
<td>
</tr>
</c:forEach>
</table>
<!--分页栏-->
<div id="bottom">
<ul class="pagination">
<li>
<a href="#">[总共页${pb.pages}]/[当前${pb.pageNum}]</a>
</li>
<li>
<a href="${pageContext.servletContext.contextPath}/prod/split.action?page=1">首页</a>
</li>
<li>
<a href="${pageContext.servletContext.contextPath}/prod/split.action?page=${pb.prePage}">上一页</a>
</li>
<li>
<a href="${pageContext.servletContext.contextPath}/prod/split.action?page=${pb.nextPage}">下一页</a>
</li>
<li>
<a href="${pageContext.servletContext.contextPath}/prod/split.action?page=${pb.pages}">尾页</a>
</li>
在以上代码中,除了第一步之外和最后一步,其余部分逆序进行会更直观。