通用分页

该博客介绍了一个Java通用的数据库分页查询模板类`DBTemplate`,包括了无分页和有分页两种情况的查询方法。通过`IORMConvert`接口实现了结果集到对象的转换。示例中展示了如何使用该模板类从`t_student`表中按条件查询学生信息并进行分页。
摘要由CSDN通过智能技术生成

通用分页查询模板类:

public final class DBTemplate {

        

         private DBTemplate() {

         }

通有分页         

         public static interface IORMConvert<T> {

                   List<T> convert(ResultSet rs) throws SQLException;

         }

        

         public static <T> List<T> query(String sql,

                            Object[] params,

                            PageBean pageBean,

                            IORMConvert<T> convert) {

                  

                   List<T> datas = new ArrayList<>();

                  

                   Connection con = null;

                   PreparedStatement ps = null;

                   ResultSet rs = null;

                  

                   //不需要分页

                   if (pageBean == null || !pageBean.isPagination()) {

                            try {

                                     con = DBUtil.getConection();

                                     ps = con.prepareStatement(sql);

                                    

                                     setParam(params, ps);

                                    

                                     rs = ps.executeQuery();

                                    

                                     datas = convert.convert(rs);

                                    

                                     return datas;

                            } catch(Exception e) {

                                     e.printStackTrace();

                            } finally {

                                     DBUtil.closeDB(rs, ps, con);

                            }

                           

                   } else {

                            //1. 查询总记录数

                            //2. 查询当前页数据

                           

                            //1. 生成统计总记录数的SQL, 查询总记录数

                            try {

                                     String countSql = "select count(*) from (" + sql + ") tmp";

                                     con = DBUtil.getConection();

                                    

                                     ps = con.prepareStatement(countSql);

                                    

                                     setParam(params, ps);

                                    

                                     rs = ps.executeQuery();

                                    

                                     while(rs.next()) {

                                               pageBean.setTotal(rs.getInt(1));

                                     }

                                    

                                     /*

                                      * 如果统计的总记录数为0,则表示没有符合条件的记录,直接返回一个空结果集即可。

                                      */

                                     if(pageBean.getTotal() == 0) {

                                               return datas;

                                     }

                                    

                            } catch (Exception e) {

                                     e.printStackTrace();

                            } finally {

                                     if(pageBean.getTotal() == 0) {

                                               DBUtil.closeDB(rs, ps, con);

                                     }

                                     DBUtil.closeDB(rs, ps);

                            }

                           

                            //查询当前页数据

                            try {

                                     String pagingSql = sql

                                                        + " limit "

                                                        + pageBean.getStartRow()

                                                        + ", "

                                                        + pageBean.getRows();

                                     ps = con.prepareStatement(pagingSql);

                                    

                                     setParam(params, ps);

                                    

                                     rs = ps.executeQuery();

                                    

                                     datas = convert.convert(rs);

                                    

                            } catch (SQLException e) {

                                     e.printStackTrace();

                            } finally {

                                     DBUtil.closeDB(rs, ps, con);

                            }

                           

                   }

                  

                   return datas;

         }

         private static void setParam(Object[] params, PreparedStatement ps) throws SQLException {

                   if (params != null) {

                            int i = 1;

                            for (Object param : params) {

                                     ps.setObject(i, param);

                                     i++;

                            }

                   }

         }

}

 使用示例:

public class StudentDao2 {

        

         public List<Student> getStudents(String sname, PageBean pageBean) {

                  

                   String sql = "select * from t_student where sname like ?";

                  

                   return DaoTemplate.query(sql, new Object[] {sname}, pageBean, new IORMConvert<Student>() {

                           

                            @Override

                            public List<Student> convert(ResultSet rs) throws SQLException {

                                     List<Student> stus = new ArrayList<>();

                                     while(rs.next()) {

                                               Student stu = new Student();

                                               stu.setSid(rs.getInt("sid"));

                                               stu.setSname(rs.getString("sname"));

                                               stu.setAge(rs.getInt("age"));

                                               stu.setRemark(rs.getString("remark"));

                                               stus.add(stu);

                                     }

                                    

                                     return stus;

                            }

                   });

                  

         }

        

         public static void main(String[] args) {

                   StudentDao2 dao = new StudentDao2();

                   PageBean pageBean = new PageBean();

                   pageBean.setPage(3);

                   List<Student> students = dao.getStudents("张%", pageBean);

                   students.forEach(s -> System.out.println(s));

         }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值