分页查询数据库语句汇总

分页查询在后端开发中经常遇到,根据前台传到后端的数据,使用数据库语句找出对应记录数是一重点

分页查询:

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

 

posted @   Tmillion  阅读(278)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示