JSP的通用分页

什么叫做分页?

简单的来说:就是将数据用页面分别显示出来

分页的作用?

1、分页可以提高客户体验度,适当地选择合适的数据条数,让页面显得更有条理,使得用户体验感良好,避免过多数据的冗余。
冗余:多余的、重复的,或者啰嗦内容

2、提高性能的需要。分页技术,有选择的加载某部分数据,在数据量较大的时候,分部分加载数据、显示数据,可以有效提高程序的性能,当然,单纯的js的分页技术并没有这种效果。

分页的三要素?

1、page 页码 视图层传递过来

2、rows 页大小 视图层传递过来
3、total 总记录数 后台查出来

注: pagination 是否分页 视图层传递过来

where 1=1的作用是什么?

String sql="select * from t_mvc_book where 1=1 ";

这是为了方便在拼接字符时出现条件判断的时候无法判断下一个是否需要拼接where字符,所以统一用在这之前加一个where 1=1方便操作。

通用分页案例?

1、首先我们先写一个通用(万能)的分页DAO方法

ublic class BaseDao<T> {
	
	public List<T> executeQuery(String sql,Class clz,PageBean pageBean) throws Exception, Exception{
		
		List<T> 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);
				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对象中属性中
				 *  1).获取到Book的属性对象
				 *  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 {
			// 关流
			DBAccess.close(con,pst,rs);
			
		}
		return list;//返回集合对象
	}
	
	/**
	 * 将原生sql拼接出符合条件的某一页的数据查询sql
	 * @param sql
	 * @param pageBean
	 * @return
	 */
	private String getPageSql(String sql, PageBean pageBean) {
		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";
	}
}

2、进行调用

public List<Book> list(Book book,PageBean pageBean) throws Exception{
		List<Book> list=new ArrayList<>();//遍历集合对象
		String sql="select * from t_mvc_book where 1=1 ";//所写的sql语句
		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 决定是否分页
			pageBean.setPage(2);//分页的页数
			b.setBname("圣墟");//模糊查的名字
			List<Book> list = bookDao.list(b, pageBean);
			for (Book book : list) {
				System.out.println(book);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值