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