通用分页案例的效果
发布日期:2022-02-27 17:51:23 浏览次数:43 分类:技术文章

本文共 5721 字,大约阅读时间需要 19 分钟。

什么为通用分页

1.简单的就是自己封装的一个分页类

2.自己可以直接调用,更改里面的sql语句即可
3分页三个属性 page页码 rows 每页的数量值 total 总记录数 pagination 是否分页

封装一个分页实体类

  • 分页类的必要属性
    1.page首页码
    2.rows 每页的数量值
    3.total 总记录数
    4.pagination 是否分页

package com.page.util;

/*** 分页工具类**/public class PageBean {   private int page = 1;// 首页码   private int rows = 10;// 查询页数值大小   private int total = 0;// 总记录数   private boolean pagination = true;// 是否分页   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 int getTotal() {   	return total;   }   public void setTotal(int total) {   	this.total = total;   }   public void setTotal(String total) {   	this.total = Integer.parseInt(total);   }   public boolean isPagination() {   	return pagination;   }   public void setPagination(boolean pagination) {   	this.pagination = pagination;   }   /**    * 获得起始记录的下标    *     * @return    */   public int getStartIndex() {   	return (this.page - 1) * this.rows;   }   @Override   public String toString() {   	return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";   }}

案例:需要一个数据类book

所查询的数据类

package com.page.entity;public class Book {	private int bid;	private String bname;	private float price;	@Override	public String toString() {		return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + "]";	}	public int getBid() {		return bid;	}	public void setBid(int bid) {		this.bid = bid;	}	public String getBname() {		return bname;	}	public void setBname(String bname) {		this.bname = bname;	}	public float getPrice() {		return price;	}	public void setPrice(float price) {		this.price = price;	}	public Book(int bid, String bname, float price) {		super();		this.bid = bid;		this.bname = bname;		this.price = price;	}	public Book() {		super();	}}

重点:作用于泛型类调用了分页类

1.用到了泛型类方法

2.sql的拼接模糊查询分页

package com.page.util;import java.lang.reflect.Field;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.page.entity.Book;/** *  *  T  =Book.class  *  T = * @author  * * @param 
*/public class BaseDao
{ /** * * @param sql 决定查询那张表的数据 * @param clz 查询出来的数据封装到那个实体类中 * @param pageBean 决定是否分页 * @return * @throws Exception */ public List
executeQuery(String sql,Class clz,PageBean pageBean) throws Exception{ List
list =new ArrayList<>(); Connection con = DBAccess.getConnection(); PreparedStatement pst = null; ResultSet rs = null; try { if(pageBean !=null && pageBean.isPagination()) {//判断是否查询到数据并且是否分页 //该分页了 String countSql = getCountSql(sql); pst = con.prepareStatement(countSql);//调用了记录数s为1的sql语句 rs = pst.executeQuery(); if(rs.next()) { pageBean.setTotal(rs.getLong(1)+""); } String pageSql =getpageSql(sql,pageBean);//调用了分页的查询语句 pst = con.prepareStatement(pageSql); rs = pst.executeQuery(); }else { pst = con.prepareStatement(sql); rs = pst.executeQuery(); } while (rs.next()) { /** * 1、创建了一个book对象 * 2、从ResultSet结果集中获取值放入Book对象中属性中 * 2.1获取到book的属性对象 * 2.2给属性对象赋值 * 3、将已经有值得book对象放入list集合中 */ T t = (T) clz.newInstance(); Field[] fields = clz.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true);//开启理解代码 field.set(t, rs.getObject(field.getName())); } list.add(t); } } finally { // TODO: handle finally clause DBAccess.close(con,pst,rs); } return list; } /** * 将原生sql拼接出符合条件的某一页的数据查询sql * @param sql * @param pageBean * @return */ //分页的查询语句 private String getpageSql(String sql, PageBean pageBean) { // TODO Auto-generated method stub return sql + " limit "+pageBean.getStartIndex() + "," + pageBean.getRows(); } /** * 用原生sql拼接处查询符号条件的记录数 * @param sql * @return */ // 符合条件的记录数方法 private String getCountSql(String sql) { // TODO Auto-generated method stub return "select count(1) from ("+ sql +") t"; }}

通用的调用分页效果的dao方法

1.在这个dao方法中只需要修改你的sql语句和你所要根据什么列来模糊查询的数据就可以任意实现分页效果

2.继承泛型baseDao

package com.page.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import com.page.entity.Book;import com.page.util.BaseDao;import com.page.util.DBAccess;import com.page.util.PageBean;import com.page.util.StringUtils;/** * 操作数据库中t_mvc_book表 * 1、加载驱动 * 2、建立连接 * 3、获取预定义处理对象 * 4、执行sql语句 * 5、处理结果集 * 6、关闭连接 * @author 林凡 * */public class BookDao extends BaseDao
{ /** * * @param book 是从jsp传递过来的参数封装成对象的作为参数查询并执行sql * @param pageBean 决定是否分页 * @return * @throws Exception */ public List
list(Book book,PageBean pageBean) throws Exception{ List
list =new ArrayList<>(); String sql ="select * from t_mvc_book where 1=1 ";//拼接要空格 if(StringUtils.isNotBlank(book.getBname())) { sql += "and bname like '%"+book.getBname()+"%'"; } return super.executeQuery(sql, Book.class, pageBean); } public static void main(String[] args) { BookDao bookDao =new BookDao(); try { Book b =new Book(); PageBean pageBean =new PageBean(); //pageBean.setPagination(false);//禁止分页效果 //pageBean.setPage(2);//可查看第2页的10条数据 b.setBname("圣墟");//模糊查询为圣墟的值 List
list = bookDao.list(b, pageBean); for (Book book : list) { System.out.println(book); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}

运行效果为该数据库的前10组数据以"圣墟"模糊查询出来的值:

在这里插入图片描述


作者:罗长富

来源:CSDN
原文:
版权声明:本文为博主原创文章,转载请附上博文链接!

转载地址:https://blog.csdn.net/shaobina/article/details/93196899 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SVN
下一篇:JSP自定义标签

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月18日 04时35分40秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

IP/tzgm.php,LianjiaSpider/在售数量.ipynb at master · BerSerK/LianjiaSpider · GitHub 2019-04-21
linux移动文件的脚本,使用Linux脚本移动文件 2019-04-21
linux查看系统所有变量,Linux系统各指标命令 2019-04-21
linux打印机守护程序,linux下怎么编写守护程序呢? 2019-04-21
嵌入式linux 设置时间,time_clock控件应用,使用命令date -s 12:00:00手动设置时间后,时间就停住不走了,我在Ubuntu和嵌入式Linux平台都测试到了... 2019-04-21
linux 8086下编译,Ubuntu18.04/Linux下安装DosBox进行8086汇编 2019-04-21
linux监控windows,zabbix监控之linux及windows客户端安装配置 2019-04-21
linux中怎么卸载tree,Liunx系统命令中tree命令详解 2019-04-21
linux 网络音箱 混音6,Linux音频编程(三)混音器介绍 2019-04-21
node与mysql开源_node与mysql的相互使用————node+mysql 2019-04-21
python合并列表重新排序_python – 将两个已排序的列表合并为一个更大的排序列表... 2019-04-21
vbs用mysql语句查询数据库_vbs脚本实现window环境下的mysql数据库的备份及删除早期备份... 2019-04-21
mysql连接nginx_nginx四层负载均衡连接mysql 2019-04-21
mysql截取栏目字符_substring从指定字符串开始截取(图) 2019-04-21
python 函数参数前面两个星号_Python中参数前面一个星号两个星号(*参数,**参数)起什么作用呢?... 2019-04-21
python类属性初始化_Python类定义、属性、初始化和析构 2019-04-21
mysql构建url给scrapy_Python Scrapy从mysq填充起始url 2019-04-21
owdcloud mysql_MySQL在Ubuntu远程配置 2019-04-21
python基础装饰器_Python基础 装饰器及练习 2019-04-21
python导出csv不带引号的句子_不带双引号写入CSV文件 2019-04-21