分页查询在后端开发中经常遇到,根据前台传到后端的数据,使用数据库语句找出对应记录数是一重点
分页查询:
1.前端传给后台的数据
1.页码:用户点击页码换页
2.页容量:每页显示多少行(可能是前台传过去,可能是后台给的默认值)
2.后台响应给前端的数据
1.总记录数:查询的总条数
2.总页数:根据总记录数与页容量求出来
总页数 = 总记录数%页容量==0?总记录数/页容量:总记录数/页容量+1
如果有余数,页容量加1
3.当前页记录,封装成page类
当前页显示的数据: sql: select * from... limit 序号,页容量
序号 = (页码 -1) * 页容量
1.查询总记录数
需要查询带条件的,不带条件的总记录数,带条件的总记录封装成一个实体类,userCondition;
不带条件的,可以调用这个方法,实体类为null
用StringBuffer来做拼接
//不带条件的总记录数,调用带条件的总记录数,传入实体类为null
@Override public int count() { return count(null); }
//带条件的总记录数,传入需要带的条件,封装成实体类UserCondition
public int count(UserCondition userCondition) { //String 不可变字符串 //StringBuffer(线程安全) StringBuilder(线程不安全) StringBuffer sql = new StringBuffer(" SELECT COUNT(1) FROM tb_userinfo WHERE 1=1 "); List<Object> paramList = new ArrayList<>(); //拼接sql,封装成方法 appedSql(sql,userCondition,paramList); }
//拼接条件 private void appedSql(StringBuffer sql, UserCondition userCondition,List<Object> paramList){ if(userCondition != null){ if(userCondition.getName() != null && !userCondition.getName().isEmpty() ){ sql.append(" AND name like ? "); paramList.add("%"+userCondition.getName()+"%"); } if(userCondition.getAddress() != null && !userCondition.getAddress().isEmpty() ){ sql.append(" AND address = ? "); paramList.add(userCondition.getAddress()); } if(userCondition.getEmail() != null && !userCondition.getEmail().isEmpty() ){ sql.append(" AND email like ? "); paramList.add("%"+userCondition.getEmail()+"%"); } if(userCondition.getStartAge() != null ){ sql.append(" AND age >= ? "); paramList.add(userCondition.getStartAge()); } if(userCondition.getEndAge() != null ){ sql.append(" AND age <= ? "); paramList.add(userCondition.getEndAge()); } } }
2.根据选中的多个id删除记录
String[] uids = request.getParameterValues("uid");得到选中的多个id值
@Override public void delBatch(String[] uids) { StringBuffer sql = new StringBuffer("DELETE FROM tb_userinfo where 1 != 1 "); List<String> params = new ArrayList<>(); for (int i = 0; i < uids.length; i++) { if(!uids[i].isEmpty()){ sql.append(" or id = ?"); params.add(uids[i]); } } JDBCUtil.executeUpdate(sql.toString(),params.toArray()); }
3.查询当前页记录
当前页记录有带条件的,和不带条件的
//带条件的,传入带条件的实体类UserCondition,和当前页码,页容量(页码从前端拿到,页容量后台自定义)
@Override public List<Userinfo> selectByPage(int currentPageInt, int pageSizeInt, UserCondition userCondition) { StringBuffer sql =new StringBuffer("SELECT * FROM tb_userinfo WHERE 1=1 "); List<Object> paramList = new ArrayList<>(); appedSql(sql,userCondition,paramList); //拼接limit sql.append(" limit ? , ?"); paramList.add((currentPageInt-1)*pageSizeInt); paramList.add(pageSizeInt); List<Userinfo> userinfos = JDBCUtil.executeQuery(sql.toString(), Userinfo.class, paramList.toArray()); return userinfos; }
//不带条件的当前页记录,调用带条件的,传入的类为null
@Override public List<Userinfo> selectByPage(int currentPageInt, int pageSizeInt) { return selectByPage(currentPageInt,pageSizeInt,null); }
标签:语句,记录,StringBuffer,查询数据库,汇总,userCondition,paramList,sql,null From: https://www.cnblogs.com/pilpill/p/16843349.html