D51-SSM整合(02分頁查詢,安全框架理論)

PageHelper分頁插件

傳統分頁查詢和普通列表查詢的區別

  • 分頁查詢返回的是一個分頁對象,列表查詢返回的是一個列表
  • 分頁查詢返回的分頁對象至少有四個屬性:
  1. 兩個需要頁面傳的:當前頁:pageNum,每頁顯示條數pageSize
  2. 兩個需要後臺查的:總記錄數 totalCount和當前頁數據。
  3. 還有一些可以計算出來的:總頁數,其實索引,結束索引,前一頁, 後一頁等。

代碼實現

封裝一個pageBean實體

public class PageBean {
    //兩個頁面必須傳的
    private Integer pageNum;//當前頁數
    private Integer pageSize;//每頁顯示條數

    //兩個後臺必須查的
    private Long totalCount;//總條數
    private List list;//當前數據
    //可以算出來的
    private Integer totalPage;//首頁
    private Integer prePage;//上一頁
    private Integer nextPage;//下一頁
    private Integer beginIndex;//當前頁的起始索引
    private Integer endIndex;//當前頁的結束索引

    public PageBean(Integer pageNum, Integer pageSize, Long totalCount) {
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        this.totalCount = totalCount;

        //需要計算的屬性
        //計算總頁數
        Long l = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
        this.totalPage = l.intValue();
        //上一頁
        this.prePage = pageNum == 1 ? 1 : pageNum - 1;
        //下一頁
        //this.nextPage = pageNum == totalPage ? totalPage : pageNum + 1;
        //
        this.beginIndex = (pageNum - 1) * pageSize + 1;
        //尾頁
        this.endIndex = pageNum * pageSize;

    }

    public void setList(List list) {
        this.list = list;
    }
}

編寫處理器

  • @RequestParam(defaultValue = “1”) Integer pageNum: 設置當前頁數爲1

  • @RequestParam(defaultValue = “3”) Integer pageSize): 設置每頁的顯示條數爲3條

@RequestMapping("/findAll")
    public String findAll(Model model,
         @RequestParam(defaultValue = "1") Integer pageNum,
          @RequestParam(defaultValue = "3") Integer pageSize){
        List<Product> list = productService.findAll(pageNum, pageSize);
        //封裝分頁對象
        PageInfo<Product> pageInfo = new PageInfo<Product>(list);
        //把model放入到request域中
        model.addAttribute("pageInfo", pageInfo);
        System.out.println(pageInfo);
        //指定視圖
        return "product-list";
    }

編寫service

@Override
    public List<Product> findAll(Integer pageNum,Integer pageSize) {
    PageHelper.startPage(pageNum,pageSize);
        return productDao.findAll();
    }

編寫dao

@RequestMapping
public interface ProductDao {

    @Select("select * from product")
    List<Product> findAll();
  }

前端頁面

在這裏插入圖片描述

<c:forEach items="${pageInfo.list}" var="p">
 <tr>
   <td><input name="ids" type="checkbox" value="${p.id}"></td>
     <td>${p.id}</td>
     <td>${p.productNum}</td>
     <td>${p.productName}</td>
     <td>${p.departureTimeStr}</td>
     <td>${p.productPrice}</td>
     <td>${p.productStatusStr}</td>
     <td class="text-center">
     
     <button type="button" class="btn bg-olive btn-xs"
	onclick='location.href="${pageContext.request.contextPath}/product/toEditPage?id=${p.id}"'>修改
</button>
	<button type="button" class="btn bg-olive btn-xs" onclick='location.href="all-order-manage-edit.html"'>查看
	</button>
   </td>
 </tr>
</c:forEach>

分頁條

<div class="pull-left">
  <div class="form-group form-inline">
   總共${pageInfo.pages} 頁,共${pageInfo.total}條數據。
   每頁
<select class="form-control" id="psBtn">
<%--動態顯示下拉菜單的數據並回顯pageSize--%>
     <c:forEach begin="1" end="6" var="ps">
       <c:choose>
         <c:when test="${pageInfo.pageSize==ps}">
           <option value="${ps}" selected="selected">${ps}</option>
         </c:when>
         <c:otherwise>
           <option value="${ps}">${ps}</option>
         </c:otherwise>
      </c:choose>
	 </c:forEach>
</select><%--給下拉菜單綁定change事件,每次改變pageSize,都會重新發起請求--%>
       <script type="text/javascript">
          $(function () {
             $("#psBtn").change(function () {
                var pageSize=$(this).val();
				location.href="${pageContext.request.contextPath}
								/product/findAll?pageSize="+pageSize;
		});
     })
   </script>
  </div>
</div>

首頁,上一頁,下一頁

<div class="box-tools pull-right">
  <ul class="pagination">
    <li><a href="javascript:changePageNum(1)" aria-label="Previous"></a></li>
<li><a href="javascript:changePageNum(${pageInfo.prePage})">上一頁</a</li>
  <c:forEach begin="1" end="${pageInfo.pages}" var="pn"> <li>
     <a href="javascript:changePageNum(${pn})">${pn}</a>
</li>
   </c:forEach>
      <li><a href="javascript:changePageNum(${pageInfo.nextPage})">下一頁</a></li> 
<li>
<a href="javascript:changePageNum(${pageInfo.pages})" aria-label="Next">尾頁</a></li>
	</ul>
  </div>
<script type="text/javascript">
  function changePageNum(pageNum) { 
  location.href="${pageContext.request.contextPath}/product/findAllpageSize=${pageInfo.pageSize}&pageNum="+pageNum;
  }
</script>

二、安全框架

  • 使用安全框架的目的: 控制不同權限的用戶, 操作不同的業務功能。

安全框架實現業務代碼的安全控制

  • 兩步
  1. 認證:讓系統知道你的身份【角色】,認證其實就是登陸。
  2. 授權:是當前系統知道你是什麼角色後,會根據當前角色具有的權限,給對應用戶授予權限。

要完成認證和授權需要三個對象

  1. 用戶: 用戶是認證使用的。裏面存放的是用戶名和密碼,還有用戶擁有的角色信息。
  2. 角色: 角色中存儲的有當前角色具有的權限 。知道了角色,就可以授予對應的權限。
  3. 權限: 存儲的是業務操作地址。即地址欄的地址。

對應關係

  • 用戶和角色在數據庫中是多對用
  • 角色和權限在數據庫中是多對多
  • 用戶和權限沒有直接關係, 是用過角色來建立關係的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章