PageHelper分頁插件
傳統分頁查詢和普通列表查詢的區別
- 分頁查詢返回的是一個分頁對象,列表查詢返回的是一個列表。
- 分頁查詢返回的分頁對象至少有四個屬性:
- 兩個需要頁面傳的:當前頁:pageNum,每頁顯示條數pageSize
- 兩個需要後臺查的:總記錄數 totalCount和當前頁數據。
- 還有一些可以計算出來的:總頁數,其實索引,結束索引,前一頁, 後一頁等。
代碼實現
封裝一個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>
二、安全框架
- 使用安全框架的目的: 控制不同權限的用戶, 操作不同的業務功能。
安全框架實現業務代碼的安全控制
- 兩步
- 認證:讓系統知道你的身份【角色】,認證其實就是登陸。
- 授權:是當前系統知道你是什麼角色後,會根據當前角色具有的權限,給對應用戶授予權限。
要完成認證和授權需要三個對象
- 用戶: 用戶是認證使用的。裏面存放的是用戶名和密碼,還有用戶擁有的角色信息。
- 角色: 角色中存儲的有當前角色具有的權限 。知道了角色,就可以授予對應的權限。
- 權限: 存儲的是業務操作地址。即地址欄的地址。
對應關係
- 用戶和角色在數據庫中是多對用
- 角色和權限在數據庫中是多對多
- 用戶和權限沒有直接關係, 是用過角色來建立關係的。