逻辑:
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());
}