mysql 通用分页_通用分页(一)

packagecom.GeneralPaging.util;importjava.awt.print.Pageable;importjava.lang.reflect.Field;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;importcom.GeneralPaging.entity.Book;importcom.mysql.jdbc.Connection;/*** T代表你要对哪个实体类对应表进行查询

*@authorAdministrator

*

*@param*/

public class BaseDao{/***

*@paramsql 查询不同的实体类,对应的sql不同,需要传递

*@paramclz 生产出不同的实体类对应的实例,然后装进list容器中返回

*@parampageable 决定是否分页

*@return*@throwsSQLException

*@throwsIllegalAccessException

*@throwsInstantiationException*/

public List executeQuery(String sql, Class clz,PageBean pageBean)throwsSQLException, InstantiationException, IllegalAccessException{//建立连接

Connection con=(Connection) DBAccess.getConnection();

PreparedStatement pst=null;

ResultSet rs=null;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 pagSql=getPageSql(sql,pageBean);

pst=con.prepareStatement(pagSql);

rs=pst.executeQuery();

}else{

pst=con.prepareStatement(sql);

rs=pst.executeQuery();

}

List list=new ArrayList<>();

T t;while(rs.next()) {/** 1.实例化一个book对象

* 2.取book的所有属性,然后给其赋值

* 2.1获取所有属性对象

* 2.2给属性对象赋值

* 3.赋完值的book对象装进list容器中*/

//list.add(new Book(rs.getInt("bid"), rs.getString("bname"), rs.getFloat("price")));

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);

}//关流

DBAccess.close(con, pst, rs);returnlist;

}/*** 利用原生sql拼接出符合条件的结果集的sql

*@paramsql

*@parampageBean

*@return

*/

privateString getPageSql(String sql, PageBean pageBean) {//TODO Auto-generated method stub

return sql+" LIMIT "+pageBean.getStartIndex()+","+pageBean.getRows();

}/*** 获取符合条件的总记录数的sql

*@paramsql

*@return

*/

privateString getCountSql(String sql) {//TODO Auto-generated method stub

return "SELECT COUNT(1) FROM("+sql+")t;";

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值