通用分页实例

通用分页案例

实现效果

我只做了显示数据的通用分页效果:
通用分页实现效果

需要的jar包、工具类

jar包需要c标签包,MySQL包(用的啥数据库导什么包):
在这里插入图片描述
工具类(util),按顺序(连接数据库类、字符编码过滤类、做通用分页的类、连接数据库的配置文件):
在这里插入图片描述

解析项目代码

我们以前做分页每做一个对象的分页就要在这个对象的dao包中写很多关于分页的代码,为了增加代码的重用性,我们可以将相同内容的代码写一个工具类,增加写代码的效率,我们分为两步,查询满足条件的SQL语句(需要做分页,默认为true),查询满足条件指定页码的SQL语句(拼接根据页码查询的SQL语句),如图:

package com.zengjing.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.zengjing.entity.Recruitment;
import com.zengjing.util.DBAccess;
import com.zengjing.util.PageBean;

/**
 * 用来做通用分页、相同内容
 * @author jiang
 *
 * date 下午3:25:39
 */
public class BaseDao<k> {
   

	//匿名内部类
	public interface CallBack<k>{
   
		public List<k> foreach(ResultSet rs) throws SQLException;
	}
	
	public List<k> executeQuery(String sql,PageBean pageBean ,CallBack<k> callback){
   
		
		
		Connection con=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		
		if(pageBean!=null&&pageBean.isPagination()) {
   
		
			//1、查询满足条件的总记录数
			try {
   
				con=DBAccess.getConnection();
				String countSql=this.getCountSql(sql);
				System.out.println(countSql);
				ps=con.prepareStatement(countSql);
				rs=ps.executeQuery();
				if(rs.next()) {
   
					int total=rs.getInt(1);//总记录数
					pageBean.setTotal(total);//给pagebean的总记录数赋值
				}
			} catch (Exception e) {
   
				throw new RuntimeException(e);
			}finally {
   
				DBAccess.close(null, ps, rs);
			}
		}
		//第二个条件 查询指定页码并满足条件的总记录数
				try {
   
					if(con==null) {
   
						con=DBAccess.getConnection();
					}
					String pageSql=sql;
					if(pageBean!=null&&pageBean.isPagination()) {
   
						pageSql=this.getPageBean(sql, pageBean);
					}
					
					System.out.println(pageSql);
					ps=con.prepareStatement(pageSql);
					rs=ps.executeQuery();
					return callback.foreach(rs);
				} catch (Exception e) {
   
					throw new RuntimeException(e);
				}finally {
   
					DBAccess.close(con, ps, rs);
				}
				
	}
	
	/**
	 * 专门写一个方法用来拼接查询语句的统计满足条件的总行数
	 * @param sql
	 * @return
	 */
	public String getCountSql(String sql) {
   
		return "select count(*) from ("+sql+") t1 ";
	}
	/**
	 * 专门写一个方法用来存储拼接分页的sql
	 * @param sql
	 * @param pageBnea
	 * @return
	 */
	public String getPageBean(String sql,PageBean pageBnea) {
   
		System.out.println(pageBnea.getPage());
		return sql+" limit "+pageBnea.getStartsIndex()+","+pageBnea.getRows()+"";
	}
}

dao方法中查询请求直接返回调用通用分页类的方法,传递这个对象的baseDao和SQL语句,还有实现的匿名内部类:

package com.zengjing.dao;

import java.io.Serializable;
import java
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值