分页查询和高级查询整合

1)把pageSize和currentPage封装到ProductQueryObject中

public class ProductQueryObject {
	private String name;
	private BigDecimal minSalePrice;
	private BigDecimal maxSalePrice;
	//------------------------------
	private Integer currentPage=1;
	private Integer pageSize=3;
	
	public Integer getCurrentPage() {
		return currentPage;
	}
	public void setCurrentPage(Integer currentPage) {
		this.currentPage = currentPage;
	}
	public Integer getPageSize() {
		return pageSize;
	}
	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public BigDecimal getMinSalePrice() {
		return minSalePrice;
	}
	public void setMinSalePrice(BigDecimal minSalePrice) {
		this.minSalePrice = minSalePrice;
	}
	public BigDecimal getMaxSalePrice() {
		return maxSalePrice;
	}
	public void setMaxSalePrice(BigDecimal maxSalePrice) {
		this.maxSalePrice = maxSalePrice;
	}
	//参数集合
	private List<Object> parameters=new ArrayList<>();
	//查询条件集合
	private List<String> conditions=new ArrayList<>();
	
	
	//返回查询条件
	public String getQuery() {
		StringBuilder sql=new StringBuilder(80);
		//商品名称
		if(StringUtils.isNotBlank(name)) {
			conditions.add("productName LIKE ?");
			parameters.add("%"+name+"%");
		}
		//最低价格
		if(minSalePrice!=null) {
			conditions.add("salePrice>=?");
			parameters.add(minSalePrice);
		}
		//最高价格
		if(maxSalePrice!=null) {
			conditions.add("SalePrice<=?");
			parameters.add(maxSalePrice);
		}
		if(conditions.size()==0) {
			return "";
		}
		String queryString=StringUtils.join(conditions.toArray(), " AND ");
		return sql.append(" WHERE ").append(queryString).toString();
	}
	
	//返回查询条件中的占位符参数值
	public List<Object> getParameters(){
		return parameters;
	}
	
}

2)DAO中的接口增加方法

//高级查询+分页查询
	PageResult query(ProductQueryObject qo);
public PageResult query(ProductQueryObject qo) {
		String query=qo.getQuery();
		String countSql="SELECT count(*)  FROM product"+query;
		Integer totalCount=JdbcTemplate.query(countSql, new ResultSetHandler<Long>() {
			public Long handle(ResultSet rs) throws Exception{
				if(rs.next()) {
					return rs.getLong(1);
				}
				return 0L;
			}
		},qo.getParameters().toArray()).intValue();
		if(totalCount==0) { //说明没有符合条件的数据,就没有必要查询结果集
			return PageResult.empty(qo.getPageSize());
		}
		String resultSql="select * from product "+query+" limit ?,?";
		//增加LIMIT的两个占位符参数
		qo.getParameters().add((qo.getCurrentPage()-1)*qo.getPageSize());
		qo.getParameters().add(qo.getPageSize());
		List<Product> listData=JdbcTemplate.query(resultSql, new BeanListHandler<>(Product.class), qo.getParameters().toArray());
		return new PageResult(listData, totalCount, qo.getCurrentPage(), qo.getPageSize());
	}

3)修改后台

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		ProductQueryObject qo=new ProductQueryObject(); 
		this.reqToObject(qo,req);
		req.setAttribute("qo", qo);
		PageResult pageResult=dao.query(qo);
		req.setAttribute("pageResult",pageResult);//
	    req.getRequestDispatcher("/WEB-INF/list.jsp").forward(req, resp);
	}
	
	
	private void reqToObject(ProductQueryObject qo, HttpServletRequest req) {
		String name=req.getParameter("name");
		String minSalePrice=req.getParameter("minSalePrice");
		String maxSalePrice=req.getParameter("maxSalePrice");
		//接受用户传入的currentPage和pageSize
		String currentPage=req.getParameter("currentPage");
		String pageSize=req.getParameter("pageSize");
		if(StringUtils.isNotBlank(currentPage)) {
			qo.setCurrentPage(Integer.valueOf(currentPage));
		}
		if(StringUtils.isNotBlank(pageSize)) {
			qo.setPageSize(Integer.valueOf(pageSize));
		}
		if(StringUtils.isNotBlank(name)) {
			qo.setName(name);
		}
		if(StringUtils.isNotBlank(minSalePrice)) {
			qo.setMinSalePrice(new BigDecimal(minSalePrice));
		}
		if(StringUtils.isNotBlank(maxSalePrice)) {
			qo.setMaxSalePrice(new BigDecimal(maxSalePrice));
		}
}

猜你喜欢

转载自blog.csdn.net/weixin_36328444/article/details/80739004