zoukankan      html  css  js  c++  java
  • ssm框架整合入门系列——查询-分页显示数据

    ssm框架整合入门系列——查询-分页显示数据(pageHelper的使用)


    查询也就是显示操作,在该项目下具体表现为:

    1. 访问index.jsp页面
    2. index.jsp页面发送出查询员工列表请求
    3. EmployeeController 来接受请求,查出员工数据
    4. 来到list.jsp页面进行展示

    修改index.jsp为:

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <jsp:forward page="/emps"></jsp:forward>
    
    

    com.liantao.crud.controller下新建EmployeeController.java

    package com.liantao.crud.controller;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import com.liantao.crud.bean.Employee;
    import com.liantao.crud.service.EmployeeService;
    
    /**
     * 处理员工的crud请求
     * @author liantao.me
     *
     */
    @Controller
    public class EmployeeController {
    	
    	
    	@Autowired
    	EmployeeService employeeService;
    	/*
    	 * 查询员工数据(分页查询)
    	 * @return
    	 */
    	@RequestMapping("/emps")
    	public String getEmps(@RequestParam(value="pn",defaultValue="1")Integer pn,Model model){
    		
    		//引入PageHelper分页插件
    		//查询之前需要调用,,传入页码,以及每页的大小
    		PageHelper.startPage(pn,5);
    		//startPage后面紧跟的是这个查询就是一个分页查询
    		List<Employee> emps = employeeService.getAll();
    		//使用pageInfo包装查询后的结果,只需要将Pageinfo交给页面就行了
    		//封装了详细的分页信息,包括我们查出来的数据,传入连续显示的数据
    		PageInfo page = new PageInfo(emps,5);
    		model.addAttribute("pageInfo",page);
    		return "list";
    	}
    	
    	
    }
    
    

    com.liantao.crud.service下新建EmployeeService.java

    package com.liantao.crud.service;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import com.github.pagehelper.PageHelper;
    import com.liantao.crud.bean.Employee;
    import com.liantao.crud.dao.EmployeeMapper;
    
    @Service
    public class EmployeeService {
    	
    	@Autowired
    	EmployeeMapper employeeMapper;
    	
    	/**  
    	 * 查询所有员工数据(分页查询)
    	 * @return
    	 */
    	public List<Employee> getAll() {
    		// TODO Auto-generated method stub
    	
    		return employeeMapper.selectByExampleWithDept(null);
    	}
    
    }
    
    

    并引入pageHelper插件,添加dependency:

    <!-- 引入pageHelper分页插件 -->
    	<dependency>
    	    <groupId>com.github.pagehelper</groupId>
    	    <artifactId>pagehelper</artifactId>
    	    <version>5.0.0</version>
    	</dependency>
    

    然后再mybatis-config.xml中注册,添加plugins(plugins要添加在typeAliases):

    <plugins>
      		<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
      </plugins>
    

    pageHelp插件使用文档可参照:地址

    WEB-INFviews目录下新建list.jsp页面

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>员工列表</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
    
      </head>
      
      <body>
        This is my JSP page. <br>
      </body>
    </html>
    
    

    单元测试

    com.liantao.crud.test新建一个测试类MvcTest.java,添加代码:

    package com.liantao.crud.test;
    
    import java.util.List;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.mock.web.MockHttpServletRequest;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.test.context.web.WebAppConfiguration;
    import org.springframework.test.web.servlet.MockMvc;
    import org.springframework.test.web.servlet.MvcResult;
    import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
    import org.springframework.test.web.servlet.setup.MockMvcBuilders;
    import org.springframework.web.context.WebApplicationContext;
    
    import com.github.pagehelper.PageInfo;
    import com.liantao.crud.bean.Employee;
    
    /**
     * 使用Spring测试模块提供的测试请求功能,测试curd请求的正确性
     * @author asus
     *
     */
    @RunWith(SpringJUnit4ClassRunner.class)
    @WebAppConfiguration
    @ContextConfiguration(locations={"classpath:applicationContext.xml","file:src/main/webapp/WEB-INF/dispatcherServlet-servlet.xml"})
    public class MvcTest {
    	//传入SpringMvc的ioc
    	@Autowired
    	WebApplicationContext context;
    	
    	//虚拟mvc请求,获取到处理结果
    	MockMvc mockMvc;
    	
    	@Before
    	public void initMockMvc(){
    		mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
    	}
    	@Test
    	public void testPage() throws Exception{
    		//模拟请求拿到返回值
    		MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/emps").param("pn", "1"))
    							.andReturn();
    		
    		//请求成功以后,请求域中会有pageInfo,我们可以取出pageInfo进行验证
    		MockHttpServletRequest request = result.getRequest();
    		
    		PageInfo pi = (PageInfo)request.getAttribute("pageInfo");
    		System.out.println("当前页码:"+pi.getPageNum());
    		System.out.println("总页码:"+pi.getPages());
    		System.out.println("总记录数:"+pi.getTotal());
    		System.out.println("再也没需要连续显示的页码:");
    		int[] nums = pi.getNavigatepageNums();
    		for(int i:nums){
    			System.out.println(" "+i);
    		}
    		
    		//获取员工数据
    		List<Employee> list = pi.getList();
    		for(Employee employee : list){
    			System.out.println("ID:"+employee.getEmpId()+"==>Name"+employee.getEmpName());
    		}
    		
    		
    	}
    	
    	
    }
    
    

    结果:
    MvcTest.java

    succeed


    用bootstrap编写显示页面

    由于,我们Index.jsp的forward,所以我们要编写的页面应该是list.jsp

    bootstrap文档:地址

    代码如下:

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>员工列表</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
    	<!-- 引入jquery -->
    	<script type="text/javascript" src="${path}/ssm-crud/static/js/jquery-1.12.4.js"></script>
    	<!-- 引入css、js -->
    	<link href="${path}/ssm-crud/static/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
    	<script src="${path}/ssm-crud/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
      </head>
      
      <body>
      	<div class="container">
      		<!-- 标题 -->
      		<div class="row">
      			<div class="col-md-12">
      				<h1>SSM-CRUD</h1>
      			</div>
      		</div>
      		<!-- 按钮 -->
      		<div class="row">
      			<div class="col-md-4 col-md-offset-8">
      				<button class="btn btn-primary">新增</button>
      				<button class="btn btn-danger">删除</button>
      			</div>
      		</div>
      		<!-- 显示表格数据 -->
      		<div class="row">
      			<div class="col-md-12">
      				<table class="table table-hover">
      					<tr>
      						<th>#</th>
      						<th>empName</th>
      						<th>gender</th>
      						<th>email</th>
      						<th>deptName</th>
      						<th>操作</th>
      					</tr>
      					<c:forEach items="${pageInfo.list }" var="emp">
      						<tr>
    	  						<th>${emp.empId }</th>
    	  						<th>${emp.empName }</th>
    	  						<th>${emp.gender=="M"?"男":"女" }</th>
    	  						<th>${emp.email }</th>
    	  						<th>${emp.department.deptName}</th>
    	  						<th>
    	  							<button class="btn btn-primary btn-sm">
    	  							<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
    	  							编辑</button>
    	  							<button class="btn btn-danger btn-sm">
    	  							<span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
    	  							删除</button>
    	  						</th>
      						</tr>
      					</c:forEach>
      					
      				</table>
      			</div>
      		</div>
      		<!-- 显示分页信息 -->
      		<div class="row">
      			<!-- 分页文字信息 -->
      			<div class="col-md-6">
      				当前${pageInfo.pageNum }页,总${pageInfo.pages }页,总${pageInfo.total }条记录
      			</div>
      			<!-- 分页条信息 -->
      			<div class="col-md-6">
      				<nav aria-label="Page navigation">
    				  <ul class="pagination">
    				  <li><a href="${path }/ssm-crud/emps?pn=1">首页</a></li>
    				  <!-- 判断是否有上一页,以便显示点击按钮 -->
    				  <c:if test="${pageInfo.hasPreviousPage }">
    				  	<li>	
    				      <a href="${path }/ssm-crud/emps?pn=${pageInfo.pageNum-1 }" aria-label="Previous">
    				        <span aria-hidden="true">&laquo;</span>
    				      </a>
    				    </li>
    				  </c:if>
    				  	<!-- 遍历页码 -->
    					<c:forEach items="${pageInfo.navigatepageNums }" var="page_Num">
    						<c:if test="${page_Num == pageInfo.pageNum }">
    							<li class="active"><a href="#">${page_Num }</a></li>
    						</c:if>
    						<c:if test="${page_Num != pageInfo.pageNum }">
    							<li><a href="${path }/ssm-crud/emps?pn=${page_Num }">${page_Num }</a></li>
    						</c:if>
    					</c:forEach>	    
    				    <!-- 判断是否有下一页 -->
    				    <c:if test="${pageInfo.hasNextPage }">
    				    <li>
    				      <a href="${path }/ssm-crud/emps?pn=${pageInfo.pageNum+1 }" aria-label="Next">
    				        <span aria-hidden="true">&raquo;</span>
    				      </a>
    				    </li>
    				    </c:if>
    				    
    				    <li><a href="${path }/ssm-crud/emps?pn=${pageInfo.pages }">末页</a></li>
    				  </ul>
    				</nav>
      			</div>
      			
      		</div>
      	</div>
      </body>
    </html>
    
    

    效果如图:

    员工列表

    在不用ajax技术,我们是这样请求的。下一篇将在这基础上改为发送ajax请求进行员工数据的查询

  • 相关阅读:
    IOS回调机制总结
    2.25~当svn服务器ip地址变了怎么办?
    ubuntu硬件信息,内存DDR详细信息
    关于JS相等比较算法(==)的原理
    ubuntu更改鼠标滚轮方向为自然方向(运动方向和滚轮滚动方向一致)
    C#模拟js的Json对象创建,操作
    关于json返回日期格式化的解决方案
    js定时器 timer
    ubuntu GUI界面复制文件没权限的解决方案
    CodeSmith 模板
  • 原文地址:https://www.cnblogs.com/famine/p/9911862.html
Copyright © 2011-2022 走看看