栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

基于MySql通用分页

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于MySql通用分页

通用分页

一、核心思想:将上一次的查询请求再发一次,只改变页码

二、分页三要素:(PageBean)

page:页码 视图层传递过来

rows 页大小 视图层传过来

total 总记录数 后台查出来

1.准备工作:

导入jar包:

注:z.tld是为了方便分页是已经写好的自定义标签(有需要的可以dd),需要加载驱动包,驱动包根据MySQL版本不同而不同有mysql5.7和mysql8

2.建包建类

3,utils包里的各个类都有不同的作用

连接数据库 --DBHelper

package com.zking.bookStore.utils;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;


public class DBHelper {
	private static String driver;
	private static String url;
	private static String user;
	private static String password;

	static {// 静态块执行一次,加载 驱动一次
		try {
			InputStream is = DBHelper.class
					.getResourceAsStream("config.properties");

			Properties properties = new Properties();
			properties.load(is);

			driver = properties.getProperty("driver");
			url = properties.getProperty("url");
			user = properties.getProperty("user");
			password = properties.getProperty("pwd");

			Class.forName(driver);
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

	
	public static Connection getConnection() {
		try {
			Connection con = DriverManager.getConnection(url, user, password);
			return con;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

	public static void close(ResultSet rs) {
		if (null != rs) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
	}

	public static void close(Statement stmt) {
		if (null != stmt) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
	}

	public static void close(Connection con) {
		if (null != con) {
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
	}

	public static void close(Connection con, Statement stmt, ResultSet rs) {
		close(rs);
		close(stmt);
		close(con);
	}

	public static boolean isOracle() {
		return "oracle.jdbc.driver.OracleDriver".equals(driver);
	}

	public static boolean isSQLServer() {
		return "com.microsoft.sqlserver.jdbc.SQLServerDriver".equals(driver);
	}
	
	public static boolean isMysql() {
		return "com.mysql.jdbc.Driver".equals(driver);
	}

	public static void main(String[] args) {
		Connection conn = DBHelper.getConnection();
		DBHelper.close(conn);
		System.out.println("isOracle:" + isOracle());
		System.out.println("isSQLServer:" + isSQLServer());
		System.out.println("isMysql:" + isMysql());
		System.out.println("数据库连接(关闭)成功");
	}
}

EncodingFilter---中文乱码处理

package com.zking.bookStore.utils;

import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class EncodingFilter implements Filter {

	private String encoding = "UTF-8";// 默认字符集

	public EncodingFilter() {
		super();
	}

	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse res = (HttpServletResponse) response;

		// 中文处理必须放到 chain.doFilter(request, response)方法前面
		res.setContentType("text/html;charset=" + this.encoding);
		if (req.getMethod().equalsIgnoreCase("post")) {
			req.setCharacterEncoding(this.encoding);
		} else {
			Map map = req.getParameterMap();// 保存所有参数名=参数值(数组)的Map集合
			Set set = map.keySet();// 取出所有参数名
			Iterator it = set.iterator();
			while (it.hasNext()) {
				String name = (String) it.next();
				String[] values = (String[]) map.get(name);// 取出参数值[注:参数值为一个数组]
				for (int i = 0; i < values.length; i++) {
					values[i] = new String(values[i].getBytes("ISO-8859-1"),
							this.encoding);
				}
			}
		}

		chain.doFilter(request, response);
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		String s = filterConfig.getInitParameter("encoding");// 读取web.xml文件中配置的字符集
		if (null != s && !s.trim().equals("")) {
			this.encoding = s.trim();
		}
	}

}

StringUtils---判断字符是否为空

package com.zking.bookStore.utils;

public class StringUtils {
	// 私有的构造方法,保护此类不能在外部实例化
	private StringUtils() {
	}

	
	public static boolean isBlank(String s) {
		boolean b = false;
		if (null == s || s.trim().equals("")) {
			b = true;
		}
		return b;
	}
	
	
	public static boolean isNotBlank(String s) {
		return !isBlank(s);
	}

}

PageBean--用于分页的工具类

package com.zking.bookStore.utils;


import java.util.Map;

import javax.servlet.http.HttpServletRequest;

public class PageBean {
	
	//分页三要素
	
	private int page = 1; //页码  默认为1
	
	private int rows = 10; //页大小 默认为10
	
	private int total = 0; //总记录数  默认为0
	
	private boolean pagination = true; //是否分页  默认为分页
	
	private String url;  //保存请求路径
	
	private Map map; //保存所有的请求参数

	public void setRequest(HttpServletRequest request) {
		String page = request.getParameter("page");
		String rows = request.getParameter("rows");
		String pagination = request.getParameter("pagination");
		String url = request.getRequestURI();
		Map parameterMap = request.getParameterMap();
		//设置到pagebean中
		this.setPage(page);
		this.setRows(rows);
		this.setPagination(pagination);
		this.setUrl(url);
		this.setMap(parameterMap);
	}
	
	public PageBean() {
		super();
	}

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}

	public int getRows() {
		return rows;
	}

	public void setRows(int rows) {
		this.rows = rows;
	}
	
	public void setRows(String rows) {
		if(null!=rows) {
			this.rows=Integer.parseInt(rows);
		}
	}
	
	public void setPage(String page) {
		if(null!=page) {
			this.page = Integer.parseInt(page);
		}
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}
	

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	

	public Map getMap() {
		return map;
	}

	public void setMap(Map map) {
		this.map = map;
	}

	@Override
	public String toString() {
		return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", url=" + url + ", map=" + map + "]";
	}

	public boolean isPagination() {
		return pagination;
	}

	public void setPagination(boolean pagination) {
		this.pagination = pagination;
	}
	
	public void setPagination(String pagination) {
		if(null!=pagination) {
			this.pagination=Boolean.parseBoolean(pagination);
		}
	}
	
	
	public int getStartIndex() {
		return (this.page-1)*this.rows;
	}
	
	
	public int getPrePage() {
		int perpage = this.page-1;
		if(this.page==1) {
			perpage=this.page;
		}
		return perpage;
	}
	
	
	public int getNextPage() {
		int nextPage = this.page+1;
		if(this.page==getMaxPage()) {
			nextPage = getMaxPage();
		}
		return nextPage;
	}
	
	
	public int getMaxPage() {
		int maxPage = this.total/this.rows;
		if(this.total%this.rows!=0) {
			maxPage++;
		}
		return maxPage;
	}
	
}

4,实体类 Book

package com.zking.bookStore.entity;

import java.io.Serializable;


public class Book implements Serializable{

	
	private static final long serialVersionUID = 1L;
	private Integer id;//书本编号
	private String name;//书本名称
	private float price;//书本价格
	public Book() {
		// TODO Auto-generated constructor stub
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Book [id=" + id + ", name=" + name + ", price=" + price + "]";
	}
	
}

dao方法--BookDao

package com.zking.bookStore.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.zking.bookStore.base.BaseDao;
import com.zking.bookStore.entity.Book;
import com.zking.bookStore.utils.DBHelper;
import com.zking.bookStore.utils.PageBean;
import com.zking.bookStore.utils.StringUtils;

public class BookDAO extends BaseDao{
	private PreparedStatement ps = null;
	private Connection con = null;
	private ResultSet rs = null;
	
	
	public void addBook(Book book) {
		try {
			String sql = " INSERT INTO t_book (book_name,price) VALUES (?,?)";
			//获取数据库连接对象
			con = DBHelper.getConnection();
			ps = con.prepareStatement(sql);
			ps.setString(1, book.getName());
			ps.setFloat(2, book.getPrice());
			ps.executeUpdate();
			
		} catch (Exception e) {
			throw new RuntimeException(e);
		}finally {
			DBHelper.close(con, ps, rs);
		}
	}
	
	
	public void delBook(Book b) {
		try {
			String sql = " DELETE FROM t_book WHERe id=? ";
			//获取数据库连接对象
			con = DBHelper.getConnection();
			ps = con.prepareStatement(sql);
			ps.setInt(1,b.getId());
			ps.executeUpdate();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}finally {
			DBHelper.close(con, ps, rs);
		}
	}
	
	
	public void editBook(Book b) {
		try {
			String sql = " UPDATE t_book SET book_name=?,price=?  WHERe id=? ";
			//获取数据库连接对象
			con = DBHelper.getConnection();
			ps = con.prepareStatement(sql);
			ps.setString(1, b.getName());
			ps.setFloat(2, b.getPrice());
			ps.setInt(3, b.getId());
			ps.executeUpdate();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}finally {
			DBHelper.close(con, ps, rs);
		}
	}
	
	
	public Book loadBook(Book b) {
		try {
			String sql = " SELECT id,book_name,price FROM t_book WHERe id=? ";
			//获取数据库连接对象
			con = DBHelper.getConnection();
			ps = con.prepareStatement(sql);
			ps.setInt(1, b.getId());
			rs = ps.executeQuery();
			Book book = null;
			if(rs.next()) {
				book = new Book();
				b.setId(rs.getInt("id"));
				b.setName(rs.getString("book_name"));
				b.setPrice(rs.getFloat("price"));
			}
			return b;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}finally {
			DBHelper.close(con, ps, rs);
		}
	}
	
	
	public List listBook(Book book,PageBean pagebean){
		String sql = "select id,book_name,price from t_book where 1=1";
		//模糊查询
		if(StringUtils.isNotBlank(book.getName())) {
			sql +="  AND book_name like '%"+book.getName()+"%'";
		}
		return this.executeQuery(sql, pagebean, new CallBack() {

			@Override
			public List forEachRs(ResultSet rs) throws Exception {
				List listBook = new ArrayList();
				Book b = null;
				while(rs.next()) {
					b = new Book();
					b.setId(rs.getInt("id"));
					b.setName(rs.getString("book_name"));
					b.setPrice(rs.getFloat("price"));
					listBook.add(b);
				}
				return listBook;
			}
		});
	}
}

BaseDao

package com.zking.bookStore.base;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;

import com.zking.bookStore.utils.DBHelper;
import com.zking.bookStore.utils.PageBean;

public class BaseDao {
	
	public interface CallBack{
		public List forEachRs(ResultSet rs) throws Exception;
	}
	
	
	
	
	public List executeQuery(String sql,PageBean pageBean,CallBack callBack) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			//1.获取数据库连接
			conn = DBHelper.getConnection();
			
			//2.查询符合条件的总记录数
			if(null!=pageBean && pageBean.isPagination()) {//如果分页工具类不为空  并且pagination为true,则分页
				//将普通的sql语句转换成查询总记录数的sql语句
				String countSql = this.getCountSql(sql);
				ps = conn.prepareStatement(countSql);
				rs = ps.executeQuery();
				if(rs.next()) {
					int total = rs.getInt(1);
					//将查询的总记录数放到工具类 pageBean中
					pageBean.setTotal(total);
				}
				DBHelper.close(null, ps, rs);
				
			}
			
			//3.查询符合条件并且分页的记录
			if(null!=pageBean && pageBean.isPagination()) {
				//将普通的sql语句转换成查询符合条件并且分页的sql语句
				sql = this.getPageSql(sql, pageBean);
			}
			
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			
			//遍历rs
			return callBack.forEachRs(rs);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}finally {
			DBHelper.close(conn, ps, rs);
		}
			
		
	}
	
	
	private String getCountSql(String sql) {
		String countSql = "SELECt COUNT(*) FROM ("+sql+")t1 ";
		return countSql;
	}
	
	
	private String getPageSql(String sql,PageBean pageBean) {
		String pageSql = sql + " LIMIT "+pageBean.getStartIndex()+","+pageBean.getRows();
		return pageSql;
	}
}

自定义标签PageTag

package com.zking.bookStore.tag;

import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

import com.zking.bookStore.utils.PageBean;

public class PageTag extends BodyTagSupport {
	private PageBean pageBean;

	public PageTag() {
		super();
	}

	public PageBean getPageBean() {
		return pageBean;
	}

	public void setPageBean(PageBean pageBean) {
		this.pageBean = pageBean;
	}

	@Override
	public int doStartTag() throws JspException {
		JspWriter out = pageContext.getOut();
		try {
			out.println(toHtml());
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return super.doStartTag();
	}
	
	
	private String toHtml() {
		//pageBean为空或者 不分页
		if(null==pageBean || !pageBean.isPagination()) {
			return "";
		}
		StringBuilder sb = new StringBuilder();
		//拼接form表单
		
		sb.append("
"); sb.append(""); //参数列表 Map map = pageBean.getMap(); String name =null; String[] values = null; // bookName = '不短命' hobby="篮球" hobby="足球" page="2" Set> entrySet = map.entrySet(); for (Entry entry : entrySet) { name = entry.getKey(); if(name.equals("page")) { continue; } values = entry.getValue(); for (String value : values) { // // // sb.append(""); } } sb.append(""); //拼接div部分 sb.append(""); sb.append("第"+pageBean.getPage()+"页/总共"+pageBean.getMaxPage()+"页,共"+pageBean.getTotal()+"条记录 "); //首页 上一页 if(pageBean.getPage()!=1) { sb.append("首页 rn" + " 上一页 "); }else { sb.append("首页 上一页 "); } //末页 下一页 if(pageBean.getPage()!=pageBean.getMaxPage()) { sb.append("下一页 rn" + " 末页 "); }else { sb.append("下一页 末页 "); } //跳转页 sb.append(" "); sb.append("GO"); sb.append(""); //拼接js sb.append(""); return sb.toString(); } }

BookServlet

package com.zking.bookStore.action;

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.zking.bookStore.dao.BookDAO;
import com.zking.bookStore.entity.Book;
import com.zking.bookStore.utils.PageBean;

@WebServlet("/bookAction.action")
public class BookServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
		
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置编码
		req.setCharacterEncoding("utf-8");
		
		//获取请求参数
		String bookName = req.getParameter("bookName");
		
		//获取请求参数 ,设置到pageBean中
		PageBean pageBean = new PageBean();
		
		String requestURI = req.getRequestURI();
		
//		Map parameterMap = req.getParameterMap();
		System.out.println(requestURI);
		
		pageBean.setRequest(req);
		
		Book book = new Book();
		book.setName(bookName);
		
		BookDAO bookDAO = new BookDAO();
		
		
		List listBook = bookDAO.listBook(book, pageBean);
		
		req.setAttribute("listBook", listBook);
		
		req.setAttribute("pageBean", pageBean);
		
		//转发
		req.getRequestDispatcher("/book.jsp").forward(req, resp);
		
		
	}
	
	
}

jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="z" uri="/zking" %>



Insert title here



	
		
书名:
编号 书名 价格
${b.id} ${b.name} ${b.price}
<%--
--%> <%-- 第${pageBean.page}页/总共${pageBean.total }条记录 首页  上一页  下一页  末页     跳转  --%>

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/970110.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号