-通用分页-

这篇博客详细介绍了如何在Java EE环境中实现通用分页功能。从思维导图开始,逐步讲解所需的库、简单的查询功能,以及如何通过抽取公共部分实现代码复用。接着,作者展示了通用前台分页的实现,包括PageBean类的设计、自定义JSP标签以及演示结果。最后,阐述了后台分页的编码思路,旨在提供一个可继承的基类,以减少代码量并简化分页查询的实现。
摘要由CSDN通过智能技术生成

一.思维导图:

 二.需要用到的架包

 

 三.简单的查询功能

1.编码思路 :

①建立数据库连接

②定义预定义对象preparestatement

③.查询结果集

④返回结果集
 

2.代码举例:

package com.pjl.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.zy.entity.Book;
import com.zy.util.DBAccess;
import com.zy.util.PageBean;
import com.zy.util.StringUtils;
/**
 * 所有dao层的父类
 * @author zjjt
 *
 * @param <T>
 */
public class BaseDao<T> {
	/*1抽取变化部分作为参数
	 *  sql,Class对象(Book,Article)
	 *  2.抽取公共的父类:把重复性代码剥离出来啊
	 * s
	 * @throws Exception 
	 */
	public List<T> list(String sql,Class<T> clz) throws Exception{
		List<T> list=new ArrayList<T>();
		//不确定list集合装了什么东西
		
		Connection con=DBAccess.getConnection();
		PreparedStatement ps = con.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		while(rs.next()) {
			//1实例化了一个对象 2从ResultSet的对象的属性(bid)获取值赋值给了前面赋值的实例化对象
			//books.add(new Book(rs.getInt("bid"),rs.getString("bname"), rs.getFloat("price"))); 
		T t=clz.newInstance();
		Field[] fields = clz.getDeclaredFields();
		for (Field f : fields) {
			//打开权限
			f.setAccessible(true);
			f.set(t,rs.getObject(f.getName()));
		
		}
		//3把已经赋值了的对象添加到list集合中
		list.add(t);
		}
		return list;
	}
 
	
	
 
 
}
package com.pjl.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.zy.entity.Book;
import com.zy.util.DBAccess;
import com.zy.util.PageBean;
import com.zy.util.StringUtils;
 
public class bookDao extends BaseDao<Book>{
	/**
	 * 简单的查询
	 * 思路 :1建立数据库连接
	 * 2定义预定义对象preparestatement
	 * 3查询结果集
	 * 4返回结果集
	
	 * @throws Exception 
	 */
 
普通方法 没有继承父类
	public List<Book> list(Book book) throws Exception{
		List<Book> books=new ArrayList<Book>();
		String sql="select * from t_mvc_book where 1=1 ";
		//书籍名称
		String bname = book.getBname();
		//书籍名称模糊查询  圣墟最终是通过jsp页面传递过来的
		if(StringUtils.isNotBlank(bname)) {
			sql+=" and bname like '%"+bname+"%'";
		}
		Connection con=DBAccess.getConnection();
		PreparedStatement ps = con.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		while(rs.next()) {
			books.add(new Book(rs.getInt("bid"),rs.getString("bname"), rs.getFloat("price"))); 
		}
		return books;
	}
	
	继承了父类的方法   代码明显要少,
	public List<Book> list1(Book book) throws Exception{
		String sql="select * from t_mvc_book where 1=1";
		String bname = book.getBname();
		//书籍名称模糊查询  圣墟最终是通过jsp页面传递过来的
		if(StringUtils.isNotBlank(bname)) {
			sql+=" and bname like '%"+bname+"%'";
		}
		return super.list(sql, Book.class);
	}
	
	测试
	public static void main(String[] args) throws Exception {
		bookDao bo=new bookDao();
		Book book=new Book();
		book.setBname("圣墟");
	List<Book> list=bo.list(book);
	for (Book book2 : list) {
		System.out.println(book2);
	}
}
}

3.不足之处:

①数据库连接   定义预定义对象 查询结果集 都是重复代码
②都是要返回数据库表对应的集合
③都是要处理结果集 


4.代码不一样在于:

①具体体现在 不同表有不同的字段,那么实体类对应的属性就会不一样

  ②  需要写大量的重复代码,系统的查询功能越多重复代码量越大

4. 解决方案:

①:抽取变化部分作为参数   ②抽取公共的父类,把重复性的代码抽出来

 四.通用前台分页

PageBean类:

package com.pjl.util;
 
import java.util.HashMap;
import java.util.Map;
 
import javax.servlet.http.HttpServletRequest;
 
/**
 * 分页工具类
 *
 */
public class PageBean {
 
	private int page = 1;// 页码
 
	private int rows = 10;// 页大小
 
	private int total = 0;// 总记录数
 
	private boolean pagination = true;// 是否分页
	
	private String url;//保存上一次请求的url
	
	private Map<String, String[]> paraMap
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值