07.增加商品分类查询条件

操作步骤:1):提供ProductDir的DAO实现.2):在ProductServelt中,查询出所有的商品分类信息,并提供给list.jsp页面,目的:可以选择商品分类.3):修改list.jsp增加商品分类查询.4):修改ProductQueryObject类,增加查询条件:dir_id.5):修改ProductQueryObject中的getQuery方法.增加dir_id的查询代码   6):修改ProductServelt获取商品分类参数,并设置到ProductQueryObject类中.多一个查询条件,那么在Query对象中应该多封装一个查询信息,在getQuery方法中,多编写两行代码.

dao

public interface IProductDAO {List<Product> list();List<Product> query(ProductQueryObject qo);
}
public interface IProductdirDAO {List<Productdir> list();
}

impl

public class ProductDAOImpl implements IProductDAO {public List<Product> list() {String sql = "SELECT * FROM product";return JdbcTemplate.query(sql, new ProductResultHandler());}public List<Product> query(ProductQueryObject qo) {String sqlQuery = qo.getQuery();List<Object> parameters = qo.getParameters();String sql = "SELECT * FROM product "+sqlQuery;System.out.println("SQL="+sql);System.out.println("数组:"+parameters);return JdbcTemplate.query(sql, new ProductResultHandler(),parameters.toArray());}//定义处理商品对象的结果集处理器class ProductResultHandler implements ResultSetHandler<List<Product>> {@Overridepublic List<Product> handle(ResultSet rs) throws SQLException {List<Product> list = new ArrayList<>();while (rs.next()) {Product pro = new Product();list.add(pro);pro.setId(rs.getLong("id"));pro.setProductName(rs.getString("productName"));pro.setBrand(rs.getString("brand"));pro.setSupplier(rs.getString("supplier"));pro.setSalePrice(rs.getBigDecimal("salePrice"));pro.setCostPrice(rs.getBigDecimal("costPrice"));pro.setCutoff(rs.getDouble("cutoff"));pro.setDir_id(rs.getLong("dir_id"));}return list;}}
}
public class ProductdirDAOImpl implements IProductdirDAO {public List<Productdir> list() {String sql = "SELECT * FROM productdir";return JdbcTemplate.query(sql, new ProductResultHandler());}//定义处理商品对象的结果集处理器class ProductResultHandler implements ResultSetHandler<List<Productdir>> {@Overridepublic List<Productdir> handle(ResultSet rs) throws SQLException {List<Productdir> list = new ArrayList<>();while (rs.next()) {Productdir pro = new Productdir();list.add(pro);pro.setId(rs.getLong("id"));pro.setName(rs.getString("name"));pro.setParent_id(rs.getLong("parent_id"));}return list;}}
}

domain

@Data
public class ProductQueryObject {private String name;private BigDecimal minSalePrice; private BigDecimal maxSalePrice;private Long dir_id = -1L;private List<String> conditions = new ArrayList<>();//封装占位符参数private List<Object> parameters = new ArrayList<>();//返回查询条件,如:WHERE productName LIKE ? AND salePrice >= ?public String getQuery(){StringBuilder sql = new StringBuilder();//商品名称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(dir_id != -1){conditions.add(" dir_id = ?");parameters.add(dir_id);}if(conditions.size()==0){return "";}/*for (int i = 0; i < conditions.size(); i++) {if(i==0){sql.append(" WHERE ");}else{sql.append(" AND ");}sql.append(conditions.get(i));}*/String queryString = StringUtils.join(conditions," AND ");return sql.append(" Where ").append(queryString).toString();}public List<Object> getParameters() {return parameters;}
}
@Data
public class Productdir {private String name;private Long id;private Long parent_id;
}   
public class Product {private Long id;private String productName;private String brand;private String supplier;private BigDecimal salePrice;private BigDecimal costPrice;private Double cutoff;private Long dir_id;//分类编号public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getProductName() {return productName;}public void setProductName(String productName) {this.productName = productName;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public String getSupplier() {return supplier;}public void setSupplier(String supplier) {this.supplier = supplier;}public BigDecimal getSalePrice() {return salePrice;}public void setSalePrice(BigDecimal salePrice) {this.salePrice = salePrice;}public BigDecimal getCostPrice() {return costPrice;}public void setCostPrice(BigDecimal costPrice) {this.costPrice = costPrice;}public Double getCutoff() {return cutoff;}public void setCutoff(Double cutoff) {this.cutoff = cutoff;}public Long getDir_id() {return dir_id;}public void setDir_id(Long dir_id) {this.dir_id = dir_id;}@Overridepublic String toString() {return "Product [id=" + id + ", productName=" + productName + ", brand=" + brand + ", supplier=" + supplier+ ", salePrice=" + salePrice + ", costPrice=" + costPrice + ", cutoff=" + cutoff + ", dir_id=" + dir_id+ "]";}
}

Servlet

@WebServlet("/product")
public class ProductServlet extends HttpServlet {private static final long serialVersionUID = 1L;private IProductDAO dao;private IProductdirDAO dao_dir;public void init() throws ServletException {dao = new ProductDAOImpl();dao_dir = new ProductdirDAOImpl();}//列表操作protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1:接受请求参数,封装对象//2:调用业务方法处理请求ProductQueryObject qo = new ProductQueryObject();this.request2Object(req,qo);req.setAttribute("qo",qo);List<Product> list = dao.query(qo);req.setAttribute("p", list);req.setAttribute("dir", dao_dir.list());//3:控制界面跳转req.getRequestDispatcher("/WEB-INF/views/product/product.jsp").forward(req, resp);}private void request2Object(HttpServletRequest req, ProductQueryObject qo) {String name = req.getParameter("name");String minSalePrice = req.getParameter("minSalePrice");String maxSalePrice = req.getParameter("maxSalePrice");String dir_id = req.getParameter("dir_id");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));}if(StringUtils.isNotBlank(dir_id)){qo.setDir_id(Long.valueOf(dir_id));}}
}

JDBC的操作模板(CRUD)

public class JdbcTemplate {private JdbcTemplate() {}/*** *@param sql   DML各自的SQL,由调用者决定*@param params      DML操作需要的参数,由调用者决定*@return     受影响的行数*/public static int update(String sql, Object... params) {Connection conn = null;PreparedStatement ps = null;try {conn = JdbcUtil.INSTANCE.getConn();ps = conn.prepareStatement(sql);for (int i = 0; i < params.length; i++) {ps.setObject(i + 1, params[i]);}return ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally {JdbcUtil.INSTANCE.close(conn, ps, null);}return 0;}public static <T>T query(String sql, ResultSetHandler<T> rsh ,Object... params) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {conn = JdbcUtil.INSTANCE.getConn();ps = conn.prepareStatement(sql);for (int i = 0; i < params.length; i++) {ps.setObject(i + 1, params[i]);}rs = ps.executeQuery();return rsh.handle(rs);} catch (Exception e) {e.printStackTrace();} finally {JdbcUtil.INSTANCE.close(conn, ps, rs);}return null;}
}

jsp页面

<body><form action="/product" method="post">商品名称:<input type="text" name="name" value="${qo.name}"/>商品价格:<input type="text" name="minSalePrice" value="${qo.minSalePrice}"/>到<input type="text" name="maxSalePrice" value="${qo.maxSalePrice}"/>商品种类:<select name="dir_id"><option value="-1">全部商品</option><c:forEach items="${dir}" var="d"><option value="${d.id}" ${d.id == qo.dir_id? "selected":""} >${d.name}</option></c:forEach></select><input type="submit" value=" 提交  " style="background-color: orange;"/>  </form><table border="1" width="80%" cellpadding="0" cellspacing="0"><tr style="background-color: orange"><th>id</th><th>productName</th><th>brand</th><th>supplier</th><th>salePrice</th><th>costPrice</th><th>cutoff</th><th>dir_id</th></tr><c:forEach items="${p}" var="p" varStatus="s"><tr style='background-color:${s.count % 2 == 0? "gray":""}'><td>${p.id}</td><td>${p.productName}</td><td>${p.brand}</td><td>${p.supplier}</td><td>${p.salePrice}</td><td>${p.costPrice}</td><td>${p.cutoff}</td><td><c:choose><c:when test="${p.dir_id == 1}">无线手机</c:when><c:when test="${p.dir_id == 3}">游戏手机</c:when><c:when test="${p.dir_id == 5}">有线手机</c:when></c:choose></td></tr></c:forEach></table>
</body>

条件过滤(商品名称、价格以及商品类别的查询)相关推荐

  1. 7- vue django restful framework 打造生鲜超市 -商品类别数据展示(上)

    Vue+Django REST framework实战 搭建一个前后端分离的生鲜超市网站 Django rtf 完成 商品列表页 并没有将列表页的数据json 与前端的页面展示结合起来 讲解如果将dr ...

  2. 通过Kmeans聚类算法分析行业价格给商品定价

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.聚类算法--Kmeans 二.使用步骤 1.引入库 2.读入数据 3.数据检查及处理 4.聚类分析 总结 前言 电 ...

  3. 电商推荐系统(上):推荐系统架构、数据模型、离线统计与机器学习推荐、历史热门商品、最近热门商品、商品平均得分统计推荐、基于隐语义模型的协同过滤推荐、用户商品推荐列表、商品相似度矩阵、模型评估和参数选取

    文章目录 第1章 项目体系架构设计 1.1 项目系统架构 1.2 项目数据流程 1.3 数据模型 第2章 工具环境搭建 2.1 MongoDB(单节点)环境配置 2.2 Redis(单节点)环境配置 ...

  4. SAP零售商品类别层次:为什么(业务视角)?

    SAP零售商品类别层次:为什么(业务视角)? 商品类别(Merchandise Categories)对产品进行分类,但在SAP Retail中,这只是其中的一小部分. 作为上下文,首先让我们区分SA ...

  5. 创建商品类java_SSH框架网上商城项目第9战之添加和更新商品类别功能实现

    上一节我们做完了查询和删除商品的功能,这一节我们做一下添加和更新商品的功能. 1. 添加商品类别1.1 添加类别的UI设计        我们先说一下思路:首先当用户点击"添加商品" ...

  6. Excel如何将商品名称中的商品型号提取出来

    今天跟大家分享一下Excel如何将商品名称中的商品型号提取出来 1.如下图为商品名称,现在我们想要快速将其中的商品型号提取出来 2.首先我们选中商品名称单元格区域 3.然后点击下图选项(Excel工具 ...

  7. R语言dplyr包filter函数通过逻辑条件过滤数据实战

    R语言dplyr包filter函数通过逻辑条件过滤数据实战 目录 R语言dplyr包filter函数通过逻辑条件过滤数据实战 #导入dplyr包 #仿真数据

  8. SAP MM初阶之ME12里为啥只能维护少量条件类型的价格?

    SAP MM初阶之ME12里为啥只能维护少量条件类型的价格? 我们都知道,SAP采购模块里有采购信息记录主数据,可以在里面维护物料的采购价格,以及若干附加费的rate.这里维护好的采购价格,在创建采购 ...

  9. java实现筛选_教你用Java web实现多条件过滤功能

    生活中,当你闲暇之余浏览资讯的时候,当你搜索资料但繁杂信息夹杂时候,你就会想,如何更为准确的定位需求信息.今天就为你带来: 分页查询 需求分析:在列表页面中,显示指定条数的数据,通过翻页按钮完成首页/ ...

最新文章

  1. python字符照片_python图片转字符图片
  2. CVPR2020 | 利用NAS搜索针对对抗攻击的鲁棒神经网络结构
  3. python阻塞和非阻塞_Python基础必备知识:同步异步阻塞非阻塞
  4. Tesseract入门-VS2015下调用Tesseract4.0 +win7 64位系统
  5. CenterOS 7安装Nginx
  6. opesnstack四部曲(1)---keystone
  7. 返回空的list集合*彻底删除删除集合*只是清空集合
  8. [人体参考]_人体各部分布线图人体解剖参考资料下载!
  9. 2022年计算机软件水平考试嵌入式系统设计师(中级)练习题及答案
  10. 计算机辅助翻译入门第十章课后答案,计算机辅助翻译入门
  11. 矩阵取数游戏【题解】
  12. 数据库系统-实体-联系模型
  13. Vue的自学之路(三)
  14. sql执行顺序及性能优化
  15. [项目管理]-- 项目开发流程(基本流程)
  16. 成为富人的十大心理特质
  17. 三元运算符案例(两只老虎、三个和尚)问题、分析、代码
  18. 摸鱼系列之idea摸鱼插件推荐
  19. C语言输入end时结束程序,c语言输入eof结束怎么写
  20. 我的机器学习主线「优化算法」

热门文章

  1. Unable to establish a connection to Redis Cluster at [RedisURI
  2. 为什么计算机时间要从1970年1月1日开始算起
  3. [转]PHP或ASP   中Cookie禁用了,Session还能用吗?
  4. Web自动化测试中的接口测试
  5. jQuery使用ajax错误的重复发送请求的解决办法
  6. 【JNI知识一】--JNI接口函数与指针
  7. 装完金蝶电脑无限重启_金蝶财务软件快捷键大全,提高工作效率!
  8. python 个人项目_80个Python练手项目列表,学完立马成大神 牛逼了
  9. cli vue 外部js 引入 文件_javascript - vue cli构建的项目中,vue组件里怎么引入外部js文件里的方法...
  10. 至诚学院MATLAB第四次,MATLAB 第二次实验课课堂作业(4学时)