web分页查询的具体实现,mybatis方法

使用工具:MyEclipse、Tomcat
效果展示如下:
在这里插入图片描述

主要思路:

1、页面信息获取
页面信息获取主要是与数据库交互,得到页面信息,使用不同的连接数据库的方式,方法也不太相同,要从数据库得到student表中数据stuList,及student表的数据量stuSize这里使用mybatis空架的jdbc连接方式。
项目目录结构如下:在这里插入图片描述
目录结构介绍:controller:页面功能的实现servlet,主要功能有首页信息获取、上一页、下一页、页面跳转;
entity:实体类
mapper:功能接口、xml文件
service:功能接口、功能实现
db:数据库信息
SqlMapConfigure.xml:mybatis主配置文件
所需包:
在这里插入图片描述
下面是实现部分:
SqlMapConfigure.xml 主配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
 <configuration>
    <properties resource="db/jdbc.properties"></properties>
    <!-- 批量起别名,默认别名为类名,首字母大小写都可以 -->
    <typeAliases>
       <package name="cn.it.entity"/>
    </typeAliases>
    <environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"/>				 
			<dataSource type="POOLED"> <!-- 使用连接池 -->
				<property name="driver" value="${jdbc.driver}" />			 
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
	   <package name="cn.it.mapper"/>
	</mappers>
 </configuration>

jdbc.properties 数据库配置文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/spring
jdbc.username=root
jdbc.password=123456

Student.java

package cn.it.entity;

public class Student {
	private int sid;
	private String name;
	private int age;
	public int getSid() {
		return sid;
	}
	public void setSid(int sid) {
		this.sid = sid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [age=" + age + ", name=" + name + ", sid=" + sid + "]";
	}
	
}

StudentMapper.java

package cn.it.mapper;

import java.util.List;
import java.util.Map;

import cn.it.entity.Student;

public interface StudentMapper {
	//分页查询(这里map的入参为num,offset,num为起始位置,offset为从起始位置的偏移量
	//因为mybatis的入参只能有一个,这里通过map集合键值对传入)
	public List<Student> selectStudentForPage(Map<String, Integer> map)throws Exception;
	//查询数据令
	public int selectTableSize()throws Exception;
}

StudentMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.it.mapper.StudentMapper">
 	<!-- 分页查询 -->
 	<resultMap type="Student" id="StudentMap">
 		<id column="s_id" property="sid"/>
 		<result column="s_name" property="name"/>
 		<result column="s_age" property="age"/>
 	</resultMap>
 	<select id="selectStudentForPage" parameterType="java.util.Map" resultMap="StudentMap">
 		select * from student limit #{num},#{offset}
 	</select>
 	<!-- 分页数据量查询 -->
 	<select id="selectTableSize" resultType="java.lang.Integer">
 		select count(*) from student
 	</select>
 </mapper>

StudentService .java

package cn.it.service;

import java.util.List;
import cn.it.entity.Student;
public interface StudentService {
	//分页查询
	public List<Student> quaryStudentForPage(int num, int offset)throws Exception;
	//数据量查询
	public int quaryTableSize()throws Exception;
}

StudentServiceImpl.java

package cn.it.service;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import cn.it.entity.Student;
import cn.it.mapper.StudentMapper;

public class StudentServiceImpl implements StudentService {
	private static SqlSessionFactory sessionFactory;
	static{
		String resource = "SqlMapConfigure.xml";
		InputStream is = null;
		 try {
			is = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
		sessionFactory = new SqlSessionFactoryBuilder().build(is);
	}
	//分页查询
	public List<Student> quaryStudentForPage(int num, int offset)
			throws Exception {
		SqlSession session = sessionFactory.openSession();
		StudentMapper studentMapper = session.getMapper(cn.it.mapper.StudentMapper.class);
		//入参封装``
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("num", num);
		map.put("offset", offset);
		List<Student> stuList = studentMapper.selectStudentForPage(map);
		session.commit();
		session.close();
		return stuList;
	}
//数据量查询
	public int quaryTableSize() throws Exception {
		SqlSession session = sessionFactory.openSession();
		StudentMapper studentMapper = session.getMapper(cn.it.mapper.StudentMapper.class);
		int size = studentMapper.selectTableSize();
		session.commit();
		session.close();
		return size;
	}
}

index.jsp

<body>
    <form action="QuaryInfoServlet" method="get">
    	<input type="submit" value="查询">
    </form>
  </body>

index.jsp主要是个页面跳转功能
QuaryInfoServlet .java 分页信息设置,及首页信息获取

package cn.it.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.it.entity.Student;
import cn.it.service.StudentService;
import cn.it.service.StudentServiceImpl;

public class QuaryInfoServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/*设置分页信息*/
		int num = 0;
		int offset = 3;//设置一页有几个数据
		int pageNum = 1;
		int stuNum = 0;
		/*获取学生数量*/
		StudentService studentService = new StudentServiceImpl();
		try {
			stuNum = studentService.quaryTableSize();
		} catch (Exception e) {
			e.printStackTrace();
		}
		/*总页码*/
		int totalPage = 0;
		if((stuNum / offset)*offset < stuNum){
			totalPage = stuNum / offset + 1;
		}else {
			totalPage = stuNum /offset ;
		}
		/*信息存储*/
		ServletContext sc = getServletContext();
		sc.setAttribute("num", num);
		sc.setAttribute("offset", offset);
		sc.setAttribute("pageNum", pageNum);
		sc.setAttribute("stuNum", stuNum);
		sc.setAttribute("totalPage", totalPage);
		/*页面信息获取*/
		/*只有一页*/
		List<Student> stuList = null;
		if (stuNum <= offset) {
			try {
				stuList = studentService.quaryStudentForPage(num, offset);
			} catch (Exception e) {
				e.printStackTrace();
			}
			request.setAttribute("stuList",stuList);
			request.setAttribute("previousValue", "首页");
			request.setAttribute("nextValue", "最后一页");
			request.setAttribute("pageNum", pageNum);
			//使按键不能点击
			request.setAttribute("prevDisabled", "disabled");
			request.setAttribute("nextDisabled", "disabled");
			//信息推到信息显示页面
			request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
		}else{
			try {
				stuList = studentService.quaryStudentForPage(num, offset);
			} catch (Exception e) {
				e.printStackTrace();
			}
			request.setAttribute("stuList",stuList);
			request.setAttribute("previousValue", "首页");
			request.setAttribute("nextValue", "下一页");
			request.setAttribute("pageNum", pageNum);
			request.setAttribute("prevDisabled", "disabled");
			request.setAttribute("nextDisabled", "");
			//信息推到信息显示页面
			request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
		}
		
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

pageInfo.jsp 简单的页面样式设计,及功能按键

<%@ page language="java" import="java.util.*,cn.it.entity.*" pageEncoding="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>My JSP 'pageInfo.jsp' starting page</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">
	-->
	<style type="text/css">
		.h1{
			position: absolute;
            left: 43%;
            top: 15%;
		}
		#tableDiv{
			position: absolute;
            left: 30%;
            top: 30%;
            width: 400px;
            height: 200px;
		}
		#tableDiv td{
            text-align:center;
            font-size:15px;
            padding:10px;
        }
        #inputBox{
				width:65px;
				height:25px;
				margin-left: 100px;
        		text-align: center;
				line-height: 25px;
			}
		.in1{
			margin-left: 30px;
        	text-align: center;
			line-height: 25px;
		}
		.in2{
			margin-left: 60px;
			width:40px;
			height:25px;
		}
		#pageTable{
			border: none;
		}
	</style>
  </head>
  <%
  		List<Student> stuList = (List<Student>)request.getAttribute("stuList");
  		String previousValue = (String)request.getAttribute("previousValue");
  		String nextValue = (String)request.getAttribute("nextValue");
  		Integer pageNum = (Integer)request.getAttribute("pageNum");
  		String prevDisabled = (String)request.getAttribute("prevDisabled");
  		String nextDisabled = (String)request.getAttribute("nextDisabled");
  		ServletContext sc = getServletContext();
  		Integer totalPage = (Integer) sc.getAttribute("totalPage"); 
  %>
  <body>
   <h1 class="h1">学生信息列表</h1>
    <div id="tableDiv">
        <table border="2" cellspacing="0" width="500px">
            <tr>
                <th>学生编号</th>
                <th>学生名字</th>
                <th>学生年龄</th>
            </tr>
            <% for(int i = 0; i < stuList.size(); i ++){%>
            	<tr>
            		<td><%=stuList.get(i).getSid() %></td>
            		<td><%=stuList.get(i).getName() %></td>
            		<td><%=stuList.get(i).getAge() %></td>
            	</tr>
            <% }%>
        </table>
        <table id="pageTable">
        	<tr>
				<td>
					<form action="StudentPrevPageServlet" method="get">
						<input type="submit" class="in1" value="<%=previousValue %>" <%=prevDisabled %>/>
					</form>
				</td>
				<td>
					<form action="JumpPageServlet" method="get">
						<input id="inputBox" type="text" class="in1" value="第<%=pageNum %>页/<%=totalPage %>页" readonly="readonly">
						<br>
						<input type="text" class="in2" name="JumpNumText"><label>页</label>
						<input type="submit" value="跳转"/>
					</form>
				</td>
				<td>
					<form action="StudentNextPageServlet" method="get">
							<input type="submit" class="in1" value="<%=nextValue %> " <%=nextDisabled%>/>
					</form>
				</td>
			</tr>
        </table>
      </div>
  </body>
</html>

StudentPrevPageServlet .java 上一页信息获取

package cn.it.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.it.entity.Student;
import cn.it.service.StudentService;
import cn.it.service.StudentServiceImpl;

public class StudentPrevPageServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		ServletContext sc = getServletContext();
		StudentService studentService = new StudentServiceImpl();
		Integer offset = (Integer) sc.getAttribute("offset");
		Integer num = (Integer) sc.getAttribute("num");
		Integer pageNum = (Integer) sc.getAttribute("pageNum");
		List<Student> stuList = null;
		if (pageNum == 1) {
			/*刷新到首页*/
			response.setHeader("refresh", "0;url='QuaryInfoServlet'");
		}else if (pageNum == 2) {
			/*分页首页信息*/
			try {
				stuList = studentService.quaryStudentForPage(num - offset, offset);
				request.setAttribute("stuList", stuList);
				request.setAttribute("previousValue", "首页");
				request.setAttribute("nextValue", "下一页");
				request.setAttribute("pageNum", pageNum - 1);
				request.setAttribute("prevDisabled", "disabled");
				request.setAttribute("nextDisabled", "");
				/*再次点击只能点击下一页*/
				sc.setAttribute("num", num);
				sc.setAttribute("pageNum", pageNum - 1);
				/*页面跳转*/
				request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}else {
			try {
				num = num - offset;
				stuList = studentService.quaryStudentForPage(num, offset);
				request.setAttribute("stuList", stuList);
				request.setAttribute("previousValue", "上一页");
				request.setAttribute("nextValue", "下一页");
				request.setAttribute("prevDisabled", "");
				request.setAttribute("nextDisabled", "");
				request.setAttribute("pageNum", pageNum - 1);
				sc.setAttribute("num", num);
				sc.setAttribute("pageNum", pageNum - 1);
				request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

StudentNextPageServlet .java 下一页功能实现

package cn.it.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.it.entity.Student;
import cn.it.service.StudentService;
import cn.it.service.StudentServiceImpl;

public class StudentNextPageServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		ServletContext sc = getServletContext();
		Integer offset = (Integer) sc.getAttribute("offset");
		Integer num = (Integer) sc.getAttribute("num");
		Integer pageNum = (Integer) sc.getAttribute("pageNum");
		/*获取总页码*/
		Integer totalPage = (Integer) sc.getAttribute("totalPage");
		List<Student> stuList = null;
		StudentService studentService = new StudentServiceImpl();
		/*最后一页*/
		 if (pageNum == totalPage -1) {
			num = (totalPage - 1) * offset;
			try {
				stuList = studentService.quaryStudentForPage(num, offset);
				request.setAttribute("stuList", stuList);
				request.setAttribute("previousValue", "上一页");
				request.setAttribute("nextValue", "最后一页");
				request.setAttribute("prevDisabled", "");
				request.setAttribute("nextDisabled", "disabled");
				request.setAttribute("pageNum", totalPage);
				/*再次点击只能点击上一页*/
				sc.setAttribute("pageNum", totalPage);
				request.getRequestDispatcher("pageInfo.jsp").forward(request, response);

			} catch (Exception e) {
				e.printStackTrace();
			}
		}else {
			try {//其他页
				num = num + offset;
				stuList = studentService.quaryStudentForPage(num, offset);
				request.setAttribute("stuList", stuList);
				request.setAttribute("previousValue", "上一页");
				request.setAttribute("nextValue", "下一页");
				request.setAttribute("prevDisabled", "");
				request.setAttribute("nextDisabled", "");
				request.setAttribute("pageNum", pageNum + 1);
				sc.setAttribute("pageNum", pageNum + 1);
				sc.setAttribute("num", num);
				request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

JumpPageServlet.java 页面跳转功能实现

package cn.it.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.it.entity.Student;
import cn.it.service.StudentService;
import cn.it.service.StudentServiceImpl;

public class JumpPageServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		ServletContext sc = getServletContext();
		/*获取总页码*/
		int totalPage = (Integer) sc.getAttribute("totalPage");
		/*获取跳转页码*/
		int JumpNum = Integer.valueOf(request.getParameter("JumpNumText"));
		List<Student> stuList = null;
		StudentService studentService = new StudentServiceImpl();
		if (JumpNum == 1) {
			/*刷新到首页*/
			response.setHeader("refresh", "0;url='QuaryInfoServlet'");
		}else if (JumpNum > 1 && JumpNum < totalPage) {//中间页
			int offset=(Integer) sc.getAttribute("offset");
			int num = (JumpNum - 1) * offset;
			try {
				stuList = studentService.quaryStudentForPage(num, offset);
			} catch (Exception e) {
				e.printStackTrace();
			}
			request.setAttribute("stuList", stuList);
			request.setAttribute("previousValue", "上一页");
			request.setAttribute("nextValue", "下一页");
			request.setAttribute("prevDisabled", "");
			request.setAttribute("nextDisabled", "");
			request.setAttribute("pageNum", JumpNum);
			sc.setAttribute("pageNum", JumpNum);
			sc.setAttribute("num", num);
			request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
		}else if (totalPage == JumpNum) { //最后一页
			int offset=(Integer) sc.getAttribute("offset");
			int num = (totalPage - 1) * offset;
			try {
				stuList = studentService.quaryStudentForPage(num, offset);
			} catch (Exception e) {
				e.printStackTrace();
			}
			request.setAttribute("stuList", stuList);
			request.setAttribute("previousValue", "上一页");
			request.setAttribute("nextValue", "最后一页");
			request.setAttribute("prevDisabled", "");
			request.setAttribute("nextDisabled", "disabled");
			request.setAttribute("pageNum", JumpNum);
			/*再次点击只能点击上一页*/
			sc.setAttribute("pageNum", JumpNum);
			sc.setAttribute("num", num);
			request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
		}else {
			/*刷新到首页 非法输入操作,也可以用弹窗提示替代 */
			response.setHeader("refresh", "0;url='QuaryInfoServlet'");
		}
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}
}

这是分页查询的简单功能实现,当然也可有进行功能增强,如查询多表的分页、再表中加入超链接,点击查询详细信息等
源码:源码链接
提取码:jge5

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值