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. 权限: 存储的是业务操作地址。即地址栏的地址。

对应关系

  • 用户和角色在数据库中是多对用
  • 角色和权限在数据库中是多对多
  • 用户和权限没有直接关系, 是用过角色来建立关系的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值