[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}">&nbsp;&nbsp;&nbsp;
        商品类型:<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>&nbsp;&nbsp;&nbsp;
        价格:<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>

 

在以上代码中,除了第一步之外和最后一步,其余部分逆序进行会更直观。

 

 

 

 

 

 

 

posted @ 2023-06-24 19:55  forshine123  阅读(87)  评论(0编辑  收藏  举报