逻辑:

 

1. 在list.jsp对应的form表单位置添加action的属性值 ${pageContext.request.contextPath}/findUserByPageServlet

2. UserService接口创建findUserByPage方法

3. 实现UserService方法findUserByPage

4. 调用dao层的UserDao接口的findByPage方法

5. 在UserDaoImpl中实现该方法,将提交的数据拼接到sql语句,select * from user where 1=1 后


代码实现

FindUserByPageServlet.java

package zr.web.userlist.web.Servlet;

import zr.web.userlist.domain.PageBean;
import zr.web.userlist.domain.User;
import zr.web.userlist.service.UserService;
import zr.web.userlist.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);
        //3. 将PageBean存入request
        request.setAttribute("pb",pb);
        //将查询条件存入request  让用户在查询之后可以看到自己查询所用到的条件是什么
        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);
    }
}

UserService接口中findUserByPage方法

   /**
     * 分页查询条件查询
     *
     *
     * @param currentPage
     * @param rows
     * @param condition
     * @return
     */
    PageBean<User> findUserByPage(String currentPage, String rows, Map<String, String[]> condition);

实现该方法

   @Override
    public PageBean<User> findUserByPage(String _currentPage, String _rows, Map<String, String[]> condition) {
        int currentPage=Integer.parseInt(_currentPage);
        int rows = Integer.parseInt(_rows);

        if (currentPage<=0){
            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);
        return pb;
    }

Dao层中的接口方法


    /**
     * 分页查询每一页的记录
     * @param start
     * @param rows
     * @param condition
     * @return
     */
    List<User> findByPage(int start, int rows, Map<String, String[]> condition);

实现该方法

    @Override
    public List<User> findByPage(int start, int rows, Map<String, String[]> condition) {
        String sql="select * from user where 1=1 ";

        //2. 拼接sql语句

        StringBuilder sb=new StringBuilder(sql);
        //3. 遍历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);
        return template.query(sb.toString(),new BeanPropertyRowMapper<User>(User.class),params.toArray());

    }

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐