J2EE之通用分页

目录

通用后台分页

1.简单的查询功能

2.通用的查询功能

通用前台分页


通用后台分页

1.简单的查询功能

编码:Connection建立连接

           preparestatement获得预编译对象

           执行查询

           ResultSet结果集处理

不足之处:

完全重复的代码:Connection建立连接

                             preparestatement获得预编译对象

                             执行查询

重复的思路:结果集处理

2.通用的查询功能

为简单查询的不足提供解决方案:

①定义父类处理重复的代码,将重复代码放到父类由子类继承

②利用放射处理重复的思路,反射可以解决应对不同结果集不同字段的问题

下面我们将解决思路转换成代码来实现:

首先我们需要创建父类BaseDao,代码如下

package com.dao;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.util.DBAccess;
import com.util.PageBean;

public class BaseDao<T> {
	public List<T> getAll(String sql, Class<T> cla) throws Exception {
		List<T> list = new ArrayList<T>();
		Connection con = DBAccess.getConnection();
		PreparedStatement ps = con.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		while (rs.next()) {
			T t = cla.newInstance();
			Field[] field = cla.getDeclaredFields();
			for (Field f : field) {
				f.setAccessible(true);
				f.set(t, rs.getObject(f.getName()));
			}
			list.add(t);
		}
		return list;
	}

	/**
	 * 通用分页查询
	 * 
	 * @param sql
	 * @param cla
	 * @param pageBean
	 * @return
	 * @throws Exception
	 */
	// 1.判断是否需要分页 无需分页:下拉框 必须分页:项目中列表类的需求 订单列表,学生列表.....
	public List<T> pages(String sql, Class<T> cla, PageBean pageBean) throws Exception {
		List<T> list = new ArrayList<T>();
		Connection con = DBAccess.getConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		if (pageBean != null && pageBean.isPagination()) {
			// 需要分页
			String countSQL = getCountSQL(sql);// 符合条件的数据条数
			ps = con.prepareStatement(countSQL);
			rs = ps.executeQuery();
			if (rs.next()) {
				pageBean.setTotal(String.valueOf(rs.getObject(1)));
			}
			String pageSQL = getPageSQL(sql, pageBean);// 分页语句
			ps = con.prepareStatement(pageSQL);
			rs = ps.executeQuery();
		} else {
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
		}
		while (rs.next()) {
			T t = cla.newInstance();
			Field[] field = cla.getDeclaredFields();
			for (Field f : field) {
				f.setAccessible(true);
				f.set(t, rs.getObject(f.getName()));// f.getName是,每个属性名称
			}
			list.add(t);
		}
		return list;
	}

	/**
	 * 将原生sql转换成pageSQL
	 * 
	 * @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转换成countSQL
	 * 
	 * @param sql
	 * @return
	 */
	private String getCountSQL(String sql) {
		// TODO Auto-generated method stub
		return "select count(1)from(" + sql + ")t";
	}

}

子类BookDao,继承父类的方法

package com.dao;

import java.sql.Connection;
import java.sql.Prepared
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小宝的宝呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值