zoukankan      html  css  js  c++  java
  • Java条件查询分页——总结

    问题

      在工作中经常会遇到分页查询,我们都知道其实分页查询也很简单,思想都是类似的,不过你见过的分页方法有哪些呢? 

    详解

      

    一、Easyui的分页查询
    1、工具类:
    Page.java:
    public class Page {
      private Integer page;
      private Integer rows;
      private Integer start;
      public Integer getPage() {
        return page;
      }
      public void setPage(Integer page) {
        this.page = page;
      }
      public void setStart(Integer start) {
        this.start = start;
      }
      public Integer getRows() {
        return rows;
      }
      public void setRows(Integer rows) {
        this.rows = rows;
      }
      public Integer getStart() {
        return (page-1) * rows;
      }
    }
    EasyUIResult.java:
    public class EasyUIResult {
      private Integer total;
      private List<?> rows;

      public EasyUIResult(Integer total, List<?> rows) {
        super();
        this.total = total;
        this.rows = rows;
      }
      public Integer getTotal() {
        return total;
      }
      public void setTotal(Integer total) {
        this.total = total;
      }
      public List<?> getRows() {
        return rows;
      }
      public void setRows(List<?> rows) {
        this.rows = rows;
      }

    }
    2、代码使用
    UserPage.java:
    public class UserPage extends Page {
      private String usercode;

      public String getUsercode() {
        return usercode;
      }

      public void setUsercode(String usercode) {
        this.usercode = usercode;
      }
    }
    UserController.java:
      @RequestMapping("/list")
      @ResponseBody
      public EasyUIResult listAllUser(UserPage userPage){
        List<User> list =userService.listAllUser(userPage);
        Integer total = userService.findUserCount(userPage);
        EasyUIResult result =new EasyUIResult(total, list);
        return result;
      }
    UserServiceImpl.java:
      public List<User> listAllUser(UserPage userPage){
        return userMapper.findAllUsers(userPage);
      }
      public Integer findUserCount(UserPage userPage){
        return userMapper.findUserCount(userPage);
      }
    UserMapper.java:
      List<User> findAllUsers(UserPage userPage);
      Integer findUserCount(UserPage userPage);
    UserMapper.xml:
      <select id="findAllUsers" resultMap="BaseResultMap" parameterType="com.pc.pojo.UserPage">
        select
        <include refid="Base_Column_List" />
        from sys_user
        <if test="usercode != null and usercode!=''" >
        where usercode like '%${usercode}%'
        </if>
        limit #{start},#{rows}
      </select>

      <select id="findUserCount" resultType="java.lang.Integer" parameterType="com.pc.pojo.UserPage">
        select
        count(*)
        from sys_user
        <if test="usercode != null and usercode!=''" >
        where usercode like '%${usercode}%'
        </if>
      </select>

    3、总结
      easyui的页面什么都不用管,因为他会向后台传递page(pc)、rows(ps),query(url),后台返回total(总页数)和rows(list)
    二、url重写(页面上不显示查询条件,拼接在url上)(goods)
    1、工具类
    PageBean.java:
    public class PageBean<T> {
      private int pc;//当前页
      private int tp;//总页数 TR/PS
      private int tr;//总记录数
      private int ps;//每页记录数
      private String url;//查询条件
      private List<T> beanList;//当前页数据
      public int getPc() {
        return pc;
      }
      public void setPc(int pc) {
        this.pc = pc;
      }
      public int getTp() {
        return tr%ps==0?tr/ps:tr/ps+1;
      }

      >>>>>>>>>>>>
      get、set方法
      >>>>>>>>>>>>
    }
    Expression.java:
      public class Expression {
        private String name;
        private String operator;
        private String value;
        >>>>>>>>>>>>
        get、set方法
        >>>>>>>>>>>>
      }

    PageConstants.java:
      public class PageConstants {
        public static final int BOOK_PAGE_SIZE=12;
        public static final int ORDER_PAGE_SIZE=5;
      }
    2、使用方法
    BookServlet.java:
      //单条件查询
      public String findByBname(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获得当前页
        int pc =getPc(request);
        //获得每页记录数
        int ps = PageConstants.BOOK_PAGE_SIZE;
        //获取查询参数
        String bname = request.getParameter("bname");
        //调用service获取pageBean
        PageBean<Book> pageBean = bookService.findByBname(bname, pc, ps);
        //获得url
        String url =getUrl(request);
        pageBean.setUrl(url);
        request.setAttribute("pageBean", pageBean);
        return"f:/jsps/book/list.jsp";
      }
      //组合查询
      public String findByCombination(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获得当前页
        int pc =getPc(request);
        //获得每页记录数
        int ps = PageConstants.BOOK_PAGE_SIZE;
        //获取查询参数
        Book book =CommonUtils.toBean(request.getParameterMap(), Book.class);
        //调用service获取pageBean
        PageBean<Book> pageBean = bookService.findByCombination(book, pc, ps);
        //获得url
        String url =getUrl(request);
        pageBean.setUrl(url);
        request.setAttribute("pageBean", pageBean);
        return"f:/jsps/book/list.jsp";
      }
      //获得url
      private String getUrl(HttpServletRequest request) {
        String url = request.getRequestURI()+"?"+request.getQueryString();
        int index =url.indexOf("&pc=");
        if(index!=-1){
          url=url.substring(0, index);
        }
        return url;
      }
    //获得pc
      private int getPc(HttpServletRequest request) {
        int pc =1;
        String param =request.getParameter("pc");
        if(param!=null&&!param.trim().isEmpty()){
          try{
            pc = Integer.parseInt(param);
          }catch(RuntimeException e){};
        }
        return pc;
      }
    BookService.java:
      //单条件查询
      public PageBean<Book> findByBname(String bname,int pc,int ps){
        try {
          return bookDao.findByBname(bname, pc, ps);
        } catch (SQLException e) {
          throw new RuntimeException(e);
        }
      }
      //组合查询
      public PageBean<Book> findByCombination(Book criteria,int pc,int ps){
        try {
          return bookDao.findByCombination(criteria, pc, ps);
        } catch (SQLException e) {
        throw new RuntimeException(e);
      }
    }
    BookDao.java
      //单条件查询
      public PageBean<Book> findByBname(String bnaem,int pc,int ps) throws SQLException{
        List<Expression> expressions = new ArrayList<Expression>();
        expressions.add(new Expression("bname", "like", "%"+bnaem+"%"));
        return findByCriteria(expressions, pc, ps);
      }
    //组合查询
       public PageBean<Book> findByCombination(Book criteria,int pc,int ps) throws SQLException{
        List<Expression> exceptions = new ArrayList<Expression>();
        exceptions.add(new Expression("bname","like","%"+criteria.getBname()+"%"));
        exceptions.add(new Expression("author","like","%"+criteria.getAuthor()+"%"));
        exceptions.add(new Expression("press","like","%"+criteria.getPress()+"%"));
        return findByCriteria(exceptions, pc, ps);
       }
    //通用查询
      public PageBean<Book> findByCriteria(List<Expression> expressions,int pc,int ps ) throws SQLException{
        //拼接语句和参数
        StringBuilder wheresql =new StringBuilder(" where 1=1");
        List<Object> params = new ArrayList<Object>();

        for (Expression expression : expressions) {
          wheresql.append(" and "+expression.getName())
          .append(" ").append(expression.getOperator()).append(" ");
          if(!expression.getOperator().equals("is null")){
            wheresql.append("?");
            params.add(expression.getValue());
          }
        }
        //总记录数
        String sql="select count(*) from t_book"+wheresql;
        Number number = (Number)qr.query(sql, new ScalarHandler(),params.toArray());
        int tr=number.intValue();
        //当前页记录
        sql ="select * from t_book"+wheresql+" order by orderBy limit ?,?";
        params.add((pc-1)*ps);
        params.add(ps);
        List<Book> beanList = qr.query(sql, new BeanListHandler<Book>(Book.class),params.toArray());
        //创建pagebean
        PageBean<Book> pageBean = new PageBean<Book>();
        pageBean.setPc(pc);
        pageBean.setPs(ps);
        pageBean.setTr(tr);
        pageBean.setBeanList(beanList);
        return pageBean;
      }
    pager.jsp:
      %@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      <script type="text/javascript">
        function _go() {
        var pc = $("#pageCode").val();//获取文本框中的当前页码
        if(!/^[1-9]d*$/.test(pc)) {//对当前页码进行整数校验
          alert('请输入正确的页码!');
          return;
        }
        if(pc > ${pageBean.tp}) {//判断当前页码是否大于最大页
          alert('请输入正确的页码!');
          return;
        }
        location = "${pageBean.url}&pc="+pc;
      }
      </script>


      <div class="divBody">
      <div class="divContent">
      <%--上一页 --%>
      <c:choose>
        <c:when test="${pageBean.pc eq 1 }"><span class="spanBtnDisabled">上一页</span></c:when>
        <c:otherwise> <a href="${pageBean.url }&pc=${pageBean.pc -1}" class="aBtn bold">上一页</a></c:otherwise>
      </c:choose>

      <%-- 计算begin和end --%>
      <%-- 如果总页数<=6,那么显示所有页码,即begin=1 end=${pb.tp} --%>
      <%-- 设置begin=当前页码-2,end=当前页码+3 --%>
      <%-- 如果begin<1,那么让begin=1 end=6 --%>
      <%-- 如果end>最大页,那么begin=最大页-5 end=最大页 --%>


      <%-- 显示页码列表 --%>
      <c:choose>
      <c:when test="${pageBean.tp <= 6 }">
        <c:set var="begin" value="1"/>
        <c:set var="end" value="${pageBean.tp }"/>
      </c:when>
      <c:otherwise>
        <c:set var="begin" value="${pageBean.pc-2 }"/>
        <c:set var="end" value="${pageBean.pc + 3}"/>
        <c:if test="${begin < 1 }">
          <c:set var="begin" value="1"/>
          <c:set var="end" value="6"/>
        </c:if>
        <c:if test="${end > pageBean.tp }">
          <c:set var="begin" value="${pageBean.tp-5 }"/>
          <c:set var="end" value="${pageBean.tp }"/>
        </c:if>
      </c:otherwise>
      </c:choose>

      <c:forEach begin="${begin }" end="${end }" var="i">
        <c:choose>
          <c:when test="${i eq pageBean.pc }">
            <span class="spanBtnSelect">${i }</span>
          </c:when>
        <c:otherwise>
          <a href="${pageBean.url }&pc=${i}" class="aBtn">${i }</a>
        </c:otherwise>
      </c:choose>
      </c:forEach>


      <%-- 显示点点点 --%>
      <span class="spanApostrophe">...</span>


      <%--下一页 --%>
      <c:choose>
        <c:when test="${pageBean.pc eq pageBean.tp }"><span class="spanBtnDisabled">下一页</span></c:when>
        <c:otherwise><a href="${pageBean.url }&pc=${pageBean.pc+1}" class="aBtn bold">下一页</a> </c:otherwise>
      </c:choose>


      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

      <%-- 共N页 到M页 --%>
      <span>共${pageBean.tp }页</span>
      <span>到</span>
      <input type="text" class="inputPageCode" id="pageCode" value="${pageBean.pc }"/>
      <span>页</span>
      <a href="javascript:_go();" class="aSubmit">确定</a>
      </div>
      </div>
    三、表单提交分页(在页面上设置表单和条件进行查询)
    1、工具类:
    PageHelper.java:
      private Integer pageNum = 1;// 当前页数
      private Integer pageSize = 10;// 每页显示条数
      private Integer maxPageNum;// 总页数
      private Integer dataTotal;// 总记录数
      private List<?> list;//数据集合
      >>>>>>>>>>>>
      get、set方法
      >>>>>>>>>>>>
      public void setDataTotal(Integer dataTotal) {
        this.dataTotal = dataTotal;
        maxPageNum = (dataTotal + pageSize -1) / pageSize;
      }
      public Integer getLimitStart(Integer currentPage){
        if (currentPage != null) {
          this.pageNum = currentPage;
        }
        return (pageNum-1)*pageSize ;
      }
    BaseController.java:
    略:
    BaseService.java:
      public abstract class BaseService<T> {
        public abstract BaseMapper<T> setBaseMapper();
        public int delete(Serializable id){
          return this.setBaseMapper().deleteByPrimaryKey(id);
        }
      public int add(T t){
        return this.setBaseMapper().insert(t);
      }
      public T get(Serializable id){
        return this.setBaseMapper().selectByPrimaryKey(id);
      }
      public int update(T t){
        return this.setBaseMapper().updateByPrimaryKey(t);
      }
      public int getCount(BaseQueryObject bqo){
        return this.setBaseMapper().count(bqo);
      }
      public List<T> list(BaseQueryObject bqo){
        return this.setBaseMapper().selectAll(bqo);
      }
      }
    BaseMapper.java:
      public interface BaseMapper<T>{
        int deleteByPrimaryKey(Serializable id);
        int insert(T t);
        T selectByPrimaryKey(Serializable id);
        int updateByPrimaryKey(T t);
        int count(BaseQueryObject bqo);
        List<T> selectAll(BaseQueryObject bqo);
      }

    2、使用方法:
    ItemController.java:
      @RequestMapping("/item")
      @Controller
      public class ItemController extends BaseController {
        @RequiredLogin
        @RequestMapping("/manage/list")
        public String list(Integer currentPage, Model model, @ModelAttribute("iqm") ItemQueryModel iqm) {
          PageHelper ph = new PageHelper();
          iqm.setLimitStart(ph.getLimitStart(currentPage));//设置从哪开始
          iqm.setPageSize(ph.getPageSize());//设置每页显示条数
          List<Item> list = itemService.list(iqm);
          int count = itemService.getCount(iqm);
          ph.setDataTotal(count);//总记录数
          ph.setList(list);
          model.addAttribute("page", ph);
          return "manage/item/list";
        }
      }
    ItemService.java:
      @Service
      public class ItemService extends BaseService<Item>{

        @Autowired
        private ItemMapper itemMapper;

        @Override
        public BaseMapper<Item> setBaseMapper() {
          return itemMapper;
        }

        public List<Item> findItemList(Integer category) {
          return itemMapper.findItemList(category);
        }
      }
    ItemMapper.java
      public interface ItemMapper extends BaseMapper<Item>{
        List<Item> findItemList(@Param("category") Integer category);
      }
    ItemMapper.xml
       <resultMap id="BaseResultMap" type="com.shop.pojo.Item" >
         <id column="id" property="id" jdbcType="INTEGER" />
          <result column="category" property="category" jdbcType="INTEGER" />
          <result column="name" property="name" jdbcType="VARCHAR" />
          <result column="introduction" property="introduction" jdbcType="VARCHAR" />
          <result column="price" property="price" jdbcType="INTEGER" />
          <result column="unit" property="unit" jdbcType="VARCHAR" />
          <result column="num" property="num" jdbcType="INTEGER" />
          <result column="pic_old_name" property="picOldName" jdbcType="VARCHAR" />
          <result column="pic_new_name" property="picNewName" jdbcType="VARCHAR" />
          <result column="descp" property="descp" jdbcType="VARCHAR" />
          <result column="state" property="state" jdbcType="INTEGER" />
          <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
          <result column="create_user" property="createUser" jdbcType="INTEGER" />
          <result column="modify_time" property="modifyTime" jdbcType="TIMESTAMP" />
          <result column="modify_user" property="modifyUser" jdbcType="INTEGER" />
          <result column="delete_time" property="deleteTime" jdbcType="TIMESTAMP" />
          <result column="delete_user" property="deleteUser" jdbcType="INTEGER" />
          <result column="del_state" property="delState" jdbcType="INTEGER" />
      </resultMap>

      <sql id="Base_Column_List" >
        id, category, name, introduction, price, unit, num, pic_old_name, pic_new_name, descp,
        state, create_time, create_user, modify_time, modify_user, delete_time, delete_user,
        del_state
      </sql>

      <sql id="base_where" >
        <where>
        del_state = 0
        <if test="name != null" >
          AND name LIKE concat('%',#{name},'%')
        </if>
        <if test="category != null" >
          AND category = #{category}
        </if>
        <if test="state != null" >
          AND state = #{state}
        </if>
        </where>
      </sql>

      <select id="selectAll" parameterType="com.shop.pojo.ItemQueryModel" resultMap="BaseResultMap">
        SELECT <include refid="Base_Column_List" />
        FROM item
        <include refid="base_where" />
        ORDER BY id DESC
        <if test="limitStart >=0 and pageSize >=0">
        LIMIT #{limitStart},#{pageSize}
        </if>
      </select>

      <select id="count" parameterType="com.shop.pojo.UserinfoQueryModel" resultType="int">
        SELECT COUNT(id) FROM item
        <include refid="base_where" />
       </select>

      <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
        select
        <include refid="Base_Column_List" />
        from item
        where id = #{id,jdbcType=INTEGER}
      </select>

      <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
        delete from item
        where id = #{id,jdbcType=INTEGER}
      </delete>

      <insert id="insert" parameterType="com.shop.pojo.Item" >
        insert into item (id, category, name,
        introduction, price, unit,
        num, pic_old_name, pic_new_name,
        descp, state, create_time,
        create_user, modify_time, modify_user,
        delete_time, delete_user, del_state
        )
        values (#{id,jdbcType=INTEGER}, #{category,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR},
        #{introduction,jdbcType=VARCHAR}, #{price,jdbcType=INTEGER}, #{unit,jdbcType=VARCHAR},
        #{num,jdbcType=INTEGER}, #{picOldName,jdbcType=VARCHAR}, #{picNewName,jdbcType=VARCHAR},
        #{descp,jdbcType=VARCHAR}, #{state,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP},
        #{createUser,jdbcType=INTEGER}, #{modifyTime,jdbcType=TIMESTAMP}, #{modifyUser,jdbcType=INTEGER},
        #{deleteTime,jdbcType=TIMESTAMP}, #{deleteUser,jdbcType=INTEGER}, #{delState,jdbcType=INTEGER}
        )
      </insert>

      <update id="updateByPrimaryKey" parameterType="com.shop.pojo.Item" >
        update item
        set category = #{category,jdbcType=INTEGER},
        name = #{name,jdbcType=VARCHAR},
        introduction = #{introduction,jdbcType=VARCHAR},
        price = #{price,jdbcType=INTEGER},
        unit = #{unit,jdbcType=VARCHAR},
        num = #{num,jdbcType=INTEGER},
        pic_old_name = #{picOldName,jdbcType=VARCHAR},
        pic_new_name = #{picNewName,jdbcType=VARCHAR},
        descp = #{descp,jdbcType=VARCHAR},
        state = #{state,jdbcType=INTEGER},
        create_time = #{createTime,jdbcType=TIMESTAMP},
        create_user = #{createUser,jdbcType=INTEGER},
        modify_time = #{modifyTime,jdbcType=TIMESTAMP},
        modify_user = #{modifyUser,jdbcType=INTEGER},
        delete_time = #{deleteTime,jdbcType=TIMESTAMP},
        delete_user = #{deleteUser,jdbcType=INTEGER},
        del_state = #{delState,jdbcType=INTEGER}
        where id = #{id,jdbcType=INTEGER}
      </update>


      <select id="findItemList" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List" />
        FROM item
        WHERE category = #{category} AND state = 0 AND del_state = 0
        ORDER BY id DESC
        LIMIT 0,4
      </select>
    3、页面
    page.jsp:
      <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      <!-- 分页 -->
      <div class="dataTables_info">当前 <font color="red">${page.pageNum}</font>/${page.maxPageNum} 页</div>
      <div class="dataTables_paginate paging_simple_numbers">
      <a href='javascript:void(0)' class="paginate_button next disabled" id="first">首页</a>
      <a href='javascript:void(0)' class="paginate_button previous disabled" id="pre">上一页</a>
      <a href='javascript:void(0)' class="paginate_button next disabled" id="next">下一页</a>
      <a href='javascript:void(0)' class="paginate_button next disabled" id="last">尾页</a>
      <input type="text" class="input-text" id="skip" maxlength="4" style=" 50px;height: 26px">
      <a href='javascript:void(0)' class="paginate_button next disabled" id="go">跳转</a>
      </div>
      <script>
        $(function(){
        //获取当前页
        var currentPage = ${page.pageNum};
        //获取最大页
        var maxPage = ${page.maxPageNum};
        //首页
        $("#first").click(function(){
        $("#currentPage").val(1);
        $("#myForm").submit();
        });
        //上一页
        $("#pre").click(function(){
          if(currentPage <= 1){
            currentPage = 1;
          }else{
            currentPage--;
          }
          $("#currentPage").val(currentPage);
          $("#myForm").submit();
        });
      //下一页
      $("#next").click(function(){
        if(currentPage >= maxPage){
          currentPage = maxPage;
        }else{
          currentPage++;
        }
        $("#currentPage").val(currentPage);
        $("#myForm").submit();
      });
      //尾页
        $("#last").click(function(){
          $("#currentPage").val(maxPage);
          $("#myForm").submit();
        });
      //输入跳转页
      var v = 1;//默认值为1
      $("#skip").keyup(function(){
      //把非数字的都替换掉
      $(this).val($(this).val().replace(/[^d]/g,""));
        v = parseInt($(this).val(), 10);//转换成十进制数字
      });
      //跳转
      $("#go").click(function(){
        if($("#skip").val() == ''){
          return;
        }
        if(v <= 1){
          //首页
          v = 1;
        }
        if (v >= maxPage){
          //尾页
          v = maxPage;
        }
        $("#currentPage").val(v);
          $("#myForm").submit();
        });
        });
      </script>
    list.jsp:
      <form action="${pageContext.request.contextPath}/item/manage/list" method="post" class="form form-horizontal responsive" id="myForm">
      <input type="text" name="name" value="${iqm.name}" placeholder="商品名称" style="250px" class="input-text">
      <select class="select" name="category">
        <option value="">请选择</option>
        <option value="0">新鲜水果</option>
        <option value='1'>海鲜水产</option>
        <option value='2'>猪肉牛肉</option>
        <option value='3'>禽类蛋品</option>
        <option value='4'>新鲜蔬菜</option>
        <option value='5'>速冻食品</option>
      </select>
      <button class="btn btn-success" type="submit"><i class="Hui-iconfont">&#xe665;</i> 搜索</button>
      <!-- 分页信息 -->
      <input type="hidden" id="currentPage" name="currentPage" value="1">
      </form>
      <script type="text/javascript">
      $("[name=category] option[value='${iqm.category}']").attr("selected","selected");
      </script>
      -----------------------------------------------------------------------------------------------------------------------------------------
      <table class="table table-border table-bordered table-bg table-hover table-sort">
        <thead>
        <tr class="text-c">
        <th width="20">序号</th>
        <th width="80">商品类别</th>
        <th width="150">商品名称</th>
        <th width="80">单价(元)</th>
        <th width="80">单位</th>
        <th width="80">库存</th>
        <th width="80">状态</th>
        <th width="80">操作</th>
      </tr>
      </thead>
      <tbody>
      <c:forEach var="item" items="${page.list}" varStatus="i">
        <tr class="text-c">
        <td>${i.index+1}</td>
        <td>
        <c:if test="${item.category == 0}">新鲜水果</c:if>
        <c:if test="${item.category == 1}">海鲜水产</c:if>
        <c:if test="${item.category == 2}">猪肉牛肉</c:if>
        <c:if test="${item.category == 3}">禽类蛋品</c:if>
        <c:if test="${item.category == 4}">新鲜蔬菜</c:if>
        <c:if test="${item.category == 5}">速冻食品</c:if>
        </td>
        <td>${item.name}</td>
        <td><fmt:formatNumber value="${item.price / 100}" type="currency" pattern="#.00"/></td>
        <td>${item.unit}</td>
        <td>${item.num}</td>
        <td>
        <c:if test="${item.state == 0}">
        <span class="label label-success radius">已上架</span>
        </c:if>
        <c:if test="${item.state == 1}">
        <span class="label label-defaunt radius">未上架</span>
        </c:if>
        </td>
        <td>
        <c:if test="${item.state == 0}">
        <a style="text-decoration:none" href="${pageContext.request.contextPath}/item/manage/editState?id=${item.id}&state=1" class="ml-5">
        <i class="Hui-iconfont">&#xe603;</i>下架
        </a>
        </c:if>
        <c:if test="${item.state == 1}">
          <a style="text-decoration:none" href="${pageContext.request.contextPath}/item/manage/editState?id=${item.id}&state=0" class="ml-5">
          <i class="Hui-iconfont">&#xe6de;</i>上架
          </a>
          <a style="text-decoration:none" href="${pageContext.request.contextPath}/item/manage/add?id=${item.id}" class="ml-5">
        <i class="Hui-iconfont">&#xe6df;</i>编辑
          </a>
          <a style="text-decoration:none" class="ml-5" onClick="del(${item.id})" href="javascript:;">
          <i class="Hui-iconfont">&#xe6e2;</i>删除
          </a>
      </c:if>
        <a style="text-decoration:none" href="${pageContext.request.contextPath}/item/manage/detail?id=${item.id}" class="ml-5">
          <i class="Hui-iconfont">&#xe665;</i>查看
        </a>
        </td>
        </tr>
      </c:forEach>
      <c:if test="${page.list == null || fn:length(page.list) == 0}">
      <tr>
      <td style="text-align: center;" colspan="8">暂无数据</td>
      </tr>
      </c:if>
      </tbody>
      </table>
    -------------------------------------------------------------------------------------------------------------------------------------

      <!-- 分页信息-->
      <c:if test="${page.list != null && fn:length(page.list) != 0}">
        <jsp:include page="../../common/page.jsp" />
      </c:if>

    四、路径作为参数
    1、工具类:
    BaseController.java:
    public class BaseController {
      //分页
      public Integer pageNum = 1;
      public Integer pageCount = 20;//每页显示条数
      public Integer maxPageNum;//总页数
      public Integer dataTotal;//总记录数

      //设置总条数
      protected void setDataTotal(int dataTotal){
        this.dataTotal = dataTotal ;
        maxPageNum = (dataTotal + pageCount -1) / pageCount;
      }

      //前5后4的算法
      protected int[] getBeginAndEnd(Integer currentPage) {
        int[] pagelen=new int[2];
        int totalPage = maxPageNum;
        int begin = 1;
        int end = totalPage == 0 ? 1 : totalPage;//如果最大页码数为0,则end=1,否则end=最大页码数,
        if((end - begin) <= 9){
          //显示十个页码,不足十个不做处理
        }else{
          if((currentPage - begin) >= 5){
            if((currentPage+4) >= totalPage){
              end = totalPage;
              begin = end - 9;
            }else{
              end = currentPage + 4;
              begin = currentPage -5;
            }
          }else{
            if((currentPage -5) >= 1){
              begin = currentPage - 5;
              end = begin + 9;
          }else{
              begin = 1;
              end=begin + 9;
          }
        }
      }
        pagelen[0] = begin;
        pagelen[1] = end;
        return pagelen;
        }
      }
    PageVo.java:
    public class PageVO {
      private Integer start;//从哪开始
      private Integer pageCount;//每页显示条数
      private Integer type;//类型
      private String q; //为查询扩展一个字段
      >>>>>>>>>>>>>>>
      setget
      >>>>>>>>>>>>>>>
    }
    2、如何使用工具
    HomeController.java:
      @RequestMapping(value="/{type}/page/{currentPage}",method=RequestMethod.GET)
      public String findItem(@PathVariable("type") int type,@PathVariable("currentPage")Integer currentPage,Model model){
        //分页查询
        PageVO pageVO = new PageVO();
        pageVO.setStart((currentPage-1)*pageCount);//从哪开始
        pageVO.setPageCount(pageCount);//每页显示条数
        pageVO.setType(type);//模块类型
        List<Home> list = homeService.getAllByHomeType(pageVO);
        model.addAttribute("list", list);
        model.addAttribute("item", Home.hometypeMap.get(type));
        model.addAttribute("modular", "首页");//模块
        //分页信息
        //设置总数
        Integer count = homeService.getCountByType(type);
        setDataTotal(count);
        int[] arr = getBeginAndEnd(currentPage);//起始页和结束页
        int start = arr[0];//起始页
        int end = arr[1];//结束页
        model.addAttribute("start", start);
        model.addAttribute("end", end);
        model.addAttribute("type", type);//把type带到页面,为了分页请求
        model.addAttribute("currentPage", currentPage);//把当前页带到页面,为了控制样式
        return "home/item";
      }

      @RequestMapping("/search")
      public String search(String q,Integer currentPage,Model model){
        //分页查询
        PageVO pageVO = new PageVO();
        if (currentPage == null) {
          currentPage = 1;
        }
        q = (q == null ? "请输入关键字" : q.trim());
        pageVO.setStart((currentPage-1)*pageCount);//从哪开始
        pageVO.setPageCount(pageCount);//每页显示条数
        pageVO.setQ(q);
        List<Home> list = homeService.getAllByTitle(pageVO);
        model.addAttribute("list", list);
        model.addAttribute("q", q);
        //分页信息
        //设置总数
        Integer count = homeService.getCountByTitle(q);
        setDataTotal(count);
        int[] arr = getBeginAndEnd(currentPage);//起始页和结束页
        int start = arr[0];//起始页
        int end = arr[1];//结束页
        model.addAttribute("start", start);
        model.addAttribute("end", end);
        model.addAttribute("currentPage", currentPage);//把当前页带到页面,为了控制样式
        return "home/query";
      }

    HomeService.java:
      public List<Home> getAllByHomeType(PageVO pageVO) {
        return homeMapper.getAllByHomeType(pageVO);
      }
      public Integer getCountByType(int type) {
        return homeMapper.getCountByType(type);
      }

      public List<Home> getAllByTitle(PageVO pageVO) {
        return homeMapper.getAllByTitle(pageVO);
      }
      public Integer getCountByTitle(String title) {
        return homeMapper.getCountByTitle(title);
      }
    HomeMapper.java:
      public interface HomeMapper {
        List<Home> getAllByHomeType(PageVO pageVO);
        Integer getCountByType(int homeType);

        List<Home> getAllByTitle(PageVO pageVO);
        Integer getCountByTitle(String title);
      }
    HomeMaper.xml:
      <select id="getAllByHomeType" parameterType="cn.hebust.web.util.PageVO" resultType="cn.hebust.web.pojo.Home">
      SELECT * FROM home WHERE homeType = #{type} AND delState = 0 ORDER BY id DESC LIMIT #{start},#{pageCount};
      </select>
      <select id="getCountByType" parameterType="int" resultType="int">
      SELECT COUNT(id) FROM home WHERE homeType = #{homeType} AND delState = 0 ;
      </select>

      <select id="getAllByTitle" parameterType="cn.hebust.web.util.PageVO" resultType="cn.hebust.web.pojo.Home">
      <!-- ${}拼接符:字符串原样拼接,如果传入的参数是基本类型(string,long,double,int,boolean,float等),那么${}中的变量名称必须是value -->
      SELECT * FROM home
      <where>
      delState = 0
      <if test="q != null and q != '' ">
      AND title LIKE concat('%',#{q},'%')
      </if>
      </where>
      ORDER BY id DESC LIMIT #{start},#{pageCount};
      </select>
      <select id="getCountByTitle" parameterType="string" resultType="int">
      SELECT COUNT(id) FROM home
      <where>
      delState = 0
      <if test="value != null and value != '' ">
      AND title LIKE concat('%',#{value},'%')

      </if>
      </where>
      </select>

  • 相关阅读:
    Windows下Yarn安装与使用
    论文阅读Graph Convolutional Matrix Completion
    如何快速查询中科院JCR分区和汤森路透JCR分区
    Implement GAN from scratch
    PyCharm将main.py解析成text文件的解决方法
    理解PyTorch的自动微分机制
    mcast_set_if函数
    mcast_get_if函数
    mcast_unblock_source函数
    mcast_block_source函数
  • 原文地址:https://www.cnblogs.com/helloworldmybokeyuan/p/11214932.html
Copyright © 2011-2022 走看看