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>
二、安全框架
- 使用安全框架的目的: 控制不同权限的用户, 操作不同的业务功能。
安全框架实现业务代码的安全控制
- 两步
- 认证:让系统知道你的身份【角色】,认证其实就是登陆。
- 授权:是当前系统知道你是什么角色后,会根据当前角色具有的权限,给对应用户授予权限。
要完成认证和授权需要三个对象
- 用户: 用户是认证使用的。里面存放的是用户名和密码,还有用户拥有的角色信息。
- 角色: 角色中存储的有当前角色具有的权限 。知道了角色,就可以授予对应的权限。
- 权限: 存储的是业务操作地址。即地址栏的地址。
对应关系
- 用户和角色在数据库中是多对用
- 角色和权限在数据库中是多对多
- 用户和权限没有直接关系, 是用过角色来建立关系的。