Java分页查询完整演示

刚学完Java Web相关知识,做一个分页查询功能演示,从这个案例中把之前的一些零散的小知识点结合起来,最重要的要学会面向对象思想的方式编程,
我们要做成如下界面:
前端页面
要求实现的功能点击相应的页面可以完成查询
首先分析在分页条上我们知道显示了共12条记录这个是我们从数据库查询出来的,这个共几页是根据每一页显示条数计算出来的
totalCount//表示总记录数
totalPage//表示总页数
list//表示当前页面显示的数据
currnetPage//表示客户端当前的页码

以上的信息都是由服务器返回客户端的

学完Java以后我们要有面向对象的思想,我们可以把以上信息封装PageBean对象,我们可以把对象传送客户端,客户端通过el表达式,就可以拿到相应的参数的值

以上都是我们服务器发送给客户端的数据,

那么客户应该向服务端输入什么数据,我们才能可以返回客户端需要的数据呢。
很显然得知总记录数我们很容易得到
totalCount:select count(*) from user;
第二数据如何获取呢
totalPage//表示总页数 totalPage=totalCount/rows rows代表每页要显示的条数,由此得知我们还要客户端获取rows,才能计算出相应的totalPage//表示总页数

list:select * from user limit ?,?;
第一个?指的是查询的索引
第二个?指的是查询的rows

currnetPage也是需要客户端提供当前页码给服务器的

由此可以计算出索引(currnetPage-1)*rows

从以上分析的只要客户端提供 currnetPage//表示客户端当前的页码,,rows//每页要显示的条数
我们就可以返回客户端需要的数据
我们做下整个代码实现逻辑分析
代码逻辑分析

活不多说直接上代码

首先创建PageBean对象

package cn.itcast.domain;

import java.util.List;

/**
 * 分页对象
 */
public class PageBean<T> {
    private int totalCount; // 总记录数
    private int totalPage ; // 总页码
    private List<T> list ; // 每页的数据
    private int currentPage ; //当前页码
    private int rows;//每页显示的记录数

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getRows() {
        return rows;
    }

    public void setRows(int rows) {
        this.rows = rows;
    }

    @Override
    public String toString() {
        return "PageBean{" +
                "totalCount=" + totalCount +
                ", totalPage=" + totalPage +
                ", list=" + list +
                ", currentPage=" + currentPage +
                ", rows=" + rows +
                '}';
    }
}

servlet代码

package cn.itcast.web.servlet;

import cn.itcast.domain.PageBean;
import cn.itcast.domain.User;
import cn.itcast.service.UserService;
import cn.itcast.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

@WebServlet("/findUserByPageServlet")
public class FindUserByPageServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        //1.获取参数
        String currentPage = request.getParameter("currentPage");
        String rows = request.getParameter("rows");

        if(currentPage == null || "".equals(currentPage)){
            currentPage = "1";
        }
        if(rows == null || "".equals(rows)){

            rows = "5";
        }
        Map<String, String[]> condition = request.getParameterMap();


        //2.调用service查询
        UserService service = new UserServiceImpl();
        PageBean<User> pb = service.findUserByPage(currentPage,rows,condition);
        System.out.println(pb);
        //3.将PageBean存入到request
        request.setAttribute("pb",pb);
        request.setAttribute("condition",condition);//用于回显信息
        //4.转发到list.jsp
        request.getRequestDispatcher("/list.jsp").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        this.doPost(request, response);
    }
}

service代码

package cn.itcast.service.impl;

import cn.itcast.dao.Impl.UserDaoImpl;
import cn.itcast.dao.UserDao;
import cn.itcast.domain.PageBean;
import cn.itcast.domain.User;
import cn.itcast.service.UserService;

import java.util.List;
import java.util.Map;

public class UserServiceImpl implements UserService {
    private UserDao dao = new UserDaoImpl();

    @Override
    public List<User> findAll() {
        //调用Dao类来完成查询

        return dao.findAll();
    }

    @Override
    public User login(User user) {
        return dao.findUserByUsernameAndPassword(user.getUsername(), user.getPassword());

    }

    @Override
    public void AddUser(User user) {
        dao.add(user);
    }

    @Override
    public void delUser(String id) {
        dao.del(id);
    }

    @Override
    public User findUserId(String id) {
        return dao.findUser(Integer.parseInt(id));
    }

    @Override
    public void updateUser(User user) {
        dao.update(user);
    }

    @Override
    public void delSelectUser(String[] ids) {
       //1.判断ids是否有值,防止报空指针异常
        if(ids != null && ids.length>0){
            for (String id : ids) {
                dao.del(id);
            }

        }


        //1.遍历数组

    }

    @Override
    public PageBean<User> findUserByPage(String _currentPage, String _rows, Map<String, String[]> condition) {
        int currentPage = Integer.parseInt(_currentPage);//String类型装换成int
        int rows = Integer.parseInt(_rows);
        if(currentPage < 1){
            currentPage = 1;

        }

        //1.创建空的PageBean对象
        PageBean<User> pb = new PageBean<User>();
        //2.设置参数
        pb.setCurrentPage(currentPage);
        pb.setRows(rows);

        //3.调用dao查询总记录数
        int totalCount = dao.findTotalCount(condition);
        pb.setTotalCount(totalCount);
        //4.调用dao开始查询的List集合
        //计算开始的记录索引

        int start =(currentPage - 1) * rows;
        List<User> list = dao.findByPage(start,rows,condition);
        pb.setList(list);
        //5.计算总页码数
        int totalPage = (totalCount % rows) == 0 ? totalCount/rows : (totalCount/rows) + 1;
        pb.setTotalPage(totalPage);
        pb.setTotalCount(totalCount);


        return pb;
    }


}

dao代码

package cn.itcast.dao.Impl;

import cn.itcast.dao.UserDao;
import cn.itcast.domain.User;
import cn.itcast.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class UserDaoImpl implements UserDao {
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public List<User> findAll() {
        //使用JDBC操作数据库
        //1.定义sql语句
        String sql = "select * from user";
        List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
        return users;
    }

    @Override
    public User findUserByUsernameAndPassword(String username, String password) {
        try {
            String sql = "select * from user where username = ? and password = ?";
            User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username, password);
            return user;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }



    }

    @Override
    public void add(User user) {
        //写sql语句
        String sql = "insert into user values(null,?,?,?,?,?,?,null,null)";

        template.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail());

    }

    @Override
    public void del(String id) {
        //1.写sql语句
        String sql = "delete from user where id=?";
        template.update(sql,id);

    }

    @Override
    public User findUser(int id) {
        //1.定义sql语句
        String sql = "select * from user where id =? ";
        User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id);//queryForObject返回的是单个对象
        //query返回的事结果集
        return user;

    }

    @Override
    public void update(User user) {
        //1.写sql语句
        String sql ="update user set name=?,gender=?,age=?,address=?,qq=?,email=? where id=?";
        template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail(), user.getId());


    }

    @Override
    public int findTotalCount(Map<String, String[]> condition) {
        //1.定义sql模板
        String sql = "select count(*) from user where 1 = 1 ";
        StringBuffer sb = new StringBuffer(sql);
        //2.遍历map集合
        Set<String> keySet = condition.keySet();
        //定义参数的集合
        List<Object> params = new ArrayList<Object>();
        for (String key : keySet) {
            //排除分页条件参数
            if("currentPage".equals(key) || "rows".equals(key)){
                continue;//跳出当前循环,下面不执行

            }
            //获取value
            String value = condition.get(key)[0];


            //判断value是否有值
            if(value != null && !"".equals(value)){
                //有值
                sb.append(" and " +key+" like ? ");
                params.add("%"+value+"%");//?条件的值

            }

        }
        System.out.println(sb.toString());
        System.out.println(params);
        return template.queryForObject(sb.toString(),Integer.class,params.toArray());


    }

    @Override
    public List<User> findByPage(int start, int rows, Map<String, String[]> condition) {
        String sql = "select * from user  where 1 = 1 ";
        StringBuffer sb = new StringBuffer(sql);
        //2.遍历map集合
        Set<String> keySet = condition.keySet();
        //定义参数的集合
        List<Object> params = new ArrayList<Object>();
        for (String key : keySet) {
            //排除分页条件参数
            if("currentPage".equals(key) || "rows".equals(key)){
                continue;//跳出当前循环,下面不执行

            }
            //获取value
            String value = condition.get(key)[0];


            //判断value是否有值
            if(value != null && !"".equals(value)){
                //有值
                sb.append(" and " +key+" like ? ");
                params.add("%"+value+"%");//?条件的值

            }

        }
        //添加分页查询
        sb.append(" limit ?,?");
        //添加分页查询的参数值
        params.add(start);
        params.add(rows);
        String s = sb.toString();

        System.out.println(sql);
        System.out.println(params);

        List<User> query = template.query(s, new BeanPropertyRowMapper<User>(User.class),params.toArray() );
        return query;
    }
}

需要注意得是如果我们输入的参数空要做一下判断,把参数重新赋值,显示第一页。
还有动态sql语句编写,以及如何拼接
list集合取到的value值是一个数组,我们这个只有一个值取到的参数后面要加【0】,例如list.name【0】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值