案例5-条件查询商品

1 修改list.jsp页面

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<HTML>
<HEAD>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="${pageContext.request.contextPath}/css/Style1.css"
    rel="stylesheet" type="text/css" />
<script language="javascript"
    src="${pageContext.request.contextPath}/js/public.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.11.3.min.js"></script>
<script type="text/javascript">
            function addProduct(){
                window.location.href = "${pageContext.request.contextPath}/adminAddProductUI";
            }
            function delProduct(pid){
                var flag = confirm("你确认要删除吗?");
                /* alert(pid); */
                /* alert(flag); */
                if(flag){
                    location.href="${pageContext.request.contextPath}/delProduct?pid="+pid;
                }
            }
            function editProduct(pid){
                /* alert(pid); */
                location.href="${pageContext.request.contextPath}/adminEditProduct?pid="+pid;
            }
            
        </script>
</HEAD>
<body>
    <br>
    <form id="Form1" name="Form1"action="${pageContext.request.contextPath}/adminSearchProductList"method="post">
    
    
        商品名称:<input type="text" name="pname" value=""/> &nbsp;&nbsp;&nbsp;
        是否热门:<select id="isHot" name="isHot">
                    <option value="">不限</option>
                    <option value="1"></option>
                    <option value="2"></option>
               </select>&nbsp;&nbsp;&nbsp;
        商品类别:<select id="cid" name="cid">
                    <option value="">不限</option>
                    <option value="1">手机数码</option>
                    <option value="2">电脑办公</option>
               </select>&nbsp;&nbsp;&nbsp;
        <input type="submit"  value="搜索"/>
        
        
        <table style="margin-top: 10px" cellSpacing="1" cellPadding="0" width="100%" align="center"bgColor="#f5fafe" border="0">
            <TBODY>
                <tr>
                    <td class="ta_01" align="center" bgColor="#afd1f3"><strong>商品列表</strong>
                    </TD>
                </tr>
                <tr>
                    <td class="ta_01" align="right">
                        <button type="button" id="add" name="add" value="添加"
                            class="button_add" onclick="addProduct()">
                            添加</button>

                    </td>
                </tr>
                <tr>
                    <td class="ta_01" align="center" bgColor="#f5fafe">
                        <table cellspacing="0" cellpadding="1" rules="all"
                            bordercolor="gray" border="1" id="DataGrid1"
                            style="BORDER-RIGHT: gray 1px solid; BORDER-TOP: gray 1px solid; BORDER-LEFT: gray 1px solid; WIDTH: 100%; WORD-BREAK: break-all; BORDER-BOTTOM: gray 1px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #f5fafe; WORD-WRAP: break-word">
                            <tr
                                style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; HEIGHT: 25px; BACKGROUND-COLOR: #afd1f3">

                                <td align="center" width="18%">序号</td>
                                <td align="center" width="17%">商品图片</td>
                                <td align="center" width="17%">商品名称</td>
                                <td align="center" width="17%">商品价格</td>
                                <td align="center" width="17%">是否热门</td>
                                <td width="7%" align="center">编辑</td>
                                <td width="7%" align="center">删除</td>
                            </tr>
                            <!-- varStatus 记录第几次遍历 -->
                            <c:forEach items="${productList }" var="product" varStatus="vs">
                            
                                <tr onmouseover="this.style.backgroundColor = 'white'"
                                    onmouseout="this.style.backgroundColor = '#F5FAFE';">
                                    <td style="CURSOR: hand; HEIGHT: 22px" align="center"
                                        width="18%">${vs.count }</td>
                                    <td style="CURSOR: hand; HEIGHT: 22px" align="center"
                                        width="17%"><img width="40" height="45" src="${pageContext.request.contextPath }/${product.pimage }"></td>
                                    <td style="CURSOR: hand; HEIGHT: 22px" align="center"
                                        width="17%">${product.pname }</td>
                                    <td style="CURSOR: hand; HEIGHT: 22px" align="center"
                                        width="17%">${product.shop_price }</td>
                                    <td style="CURSOR: hand; HEIGHT: 22px" align="center"
                                        width="17%">
                                        ${product.is_hot==1?"是":"否" }</td>
                                    <td align="center" style="HEIGHT: 22px"><a
                                        href="javascript:void(0)" onclick="editProduct(${product.pid})">
                                            <img
                                            src="${pageContext.request.contextPath}/images/i_edit.gif"
                                            border="0" style="CURSOR: hand">
                                    </a></td>
        
                                    <!-- href="javascript:void(0)"让它不跳转 -->
                                    <td align="center" style="HEIGHT: 22px"><a href="javascript:void(0)" onclick="delProduct(${product.pid})"> <img
                                            src="${pageContext.request.contextPath}/images/i_del.gif"
                                            width="16" height="16" border="0" style="CURSOR: hand">
                                    </a></td>
                                </tr>
                            </c:forEach>
                        </table>
                    </td>
                </tr>

            </TBODY>
        </table>
    </form>
</body>
</HTML>

2 web层

package www.test.web;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;

import www.test.domain.Category;
import www.test.domain.Product;
import www.test.service.AdminProductService;
import www.test.vo.Condition;

public class AdminSearchProductListServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 1 获取用户输入的查询条件数据
        Map<String, String[]> properties = request.getParameterMap();
        
        // 2 封装获取到的数据到condition对象中
        Condition condition = new Condition();
          //利用BeauUtils进行子映射封装
          //将散装的查询数据封装到一个 VO 实体中
        try {
            BeanUtils.populate(condition, properties);
        } catch (IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
           //到这里condition对象已经封装好了
        // 3 将获取到的数据传递给service层
        AdminProductService service = new AdminProductService();
        List<Product> productList = null;
        try {
            productList =  service.findProductListByCondition(condition);
        } catch (SQLException e) {
            
            e.printStackTrace();
        }
        
        //点击搜索之后,信息回显实现
        //获得所有的商品的类别数据
        List<Category> categoryList = null;
        try {
            categoryList =  service.findAllCategory();
        } catch (SQLException e) {
            
            e.printStackTrace();
        }
        // 4 将数据存储到request域中
        request.setAttribute("productList", productList);
        request.setAttribute("categoryList", categoryList);
        request.setAttribute("condition", condition);//用于数据的回显判断依据
          //转发
        request.getRequestDispatcher("admin/product/list.jsp").forward(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

3 service层

package www.test.service;

import java.sql.SQLException;
import java.util.List;

import www.test.dao.AdminProductDao;
import www.test.domain.Category;
import www.test.domain.Product;
import www.test.vo.Condition;

public class AdminProductService {

    public List<Product> findAllProduct() throws SQLException {

         //因为没有复杂业务 直接传递请求到dao层
        AdminProductDao dao = new AdminProductDao();
        return dao.findAllProduct();
    }

    
    public List<Category> findAllCategory() throws SQLException {
        
        AdminProductDao dao = new AdminProductDao();
        return dao.finAllCategory();
         
    }


    // 添加商品
    public boolean addProduct(Product product) throws SQLException {
        AdminProductDao dao = new AdminProductDao();
        return dao.addProduct(product);

    }


    //删除数据
    public boolean delProduct(String pid) throws SQLException {
        AdminProductDao dao = new AdminProductDao();
        return dao.delProduct(pid);
    }


    // 修改数据
    public Product editProduct(String pid) throws SQLException {
        AdminProductDao dao = new AdminProductDao();
        return dao.editProduct(pid);
    }

   //保存修改后的数据
    public boolean editProductSave(Product product) throws SQLException {
        
        AdminProductDao dao = new AdminProductDao();
        return dao.editProductSave(product);
    }

   //根据用户输入的添加查询product
    public List<Product> findProductListByCondition(Condition condition) throws SQLException {
        AdminProductDao dao = new AdminProductDao();
        return dao.findProductListByCondition(condition);
    }
}

4 dao层

package www.test.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import www.test.domain.Category;
import www.test.domain.Product;
import www.test.utils.C3P0Utils;
import www.test.vo.Condition;

public class AdminProductDao {

    public List<Product> findAllProduct() throws SQLException {
        
        QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
        String sql = "select * from product";
        List<Product> productList = qr.query(sql, new BeanListHandler<Product>(Product.class));
        return productList;
    }

    public List<Category> finAllCategory() throws SQLException {
        QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
        String sql = "select * from category";
        List<Category> categoryList = qr.query(sql, new BeanListHandler<Category>(Category.class));
        return categoryList;
    }

    //添加数据
    public boolean addProduct(Product product) throws SQLException {
        QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
        String sql = "insert into product values(?,?,?,?,?,?,?,?,?,?)";
        Object[] params = {product.getPid(),product.getPname(),product.getMarket_price(),product.getShop_price(),product.getPimage(),product.getPdate(),product.getIs_hot(),product.getPdesc(),product.getPflag(),product.getCid()};
        int num = qr.update(sql, params);
        if(num>0){
            return true;
        }else{
            return false;
        }
        
    }

    // 删除数据
    public boolean delProduct(String pid) throws SQLException {
        QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
        String sql = "delete from product where pid=?";
        int num = qr.update(sql, pid);
        if(num>0){
            return true;
        }else{
            return false;
        }
    }

    //修改数据
    public Product editProduct(String pid) throws SQLException {
        QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
        String sql = "select * from product where pid=?";
        Product product = qr.query(sql, new BeanHandler<Product>(Product.class),pid);
        return product;
    }

    //保存修改后的数据
    public boolean editProductSave(Product product) throws SQLException {
        QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
        String sql = "update product set pname=?,market_price=?,shop_price=?,pimage=?,pdate=?,is_hot=?,pdesc=?,pflag=?,cid=? where pid=?";
        int num = qr.update(sql, product.getPname(),product.getMarket_price(),
                product.getShop_price(),product.getPimage(),product.getPdate(),product.getIs_hot(),
                product.getPdesc(),product.getPflag(),product.getCid(),product.getPid());
        System.out.println(num);
        if(num>0){
            return true;
        }else{
            return false;
        }
    }

    //根据用户输入的条件查询商品
    public List<Product> findProductListByCondition(Condition condition) throws SQLException {
        QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
        //定义一个存储实际参数的容器
        List<String> list = new ArrayList<String>();
        String sql = "select * from product where 1=1 ";
        // 判断用户是否输入了商品名称,并且要去除两端的空格
        if(condition.getPname()!=null&&!condition.getPname().trim().equals("")){
            //防止连接到了一起,最好加上问号
            sql+=" and pname like ?";
            //将传递的参数存储到list集合中
            list.add("%"+condition.getPname().trim()+"%");
        }
        if(condition.getIsHot()!=null&&!condition.getIsHot().trim().equals("")){
            sql+=" and is_hot=? ";
            list.add(condition.getIsHot().trim());
        }
        if(condition.getCid()!=null&&!condition.getCid().trim().equals("")){
            sql+=" and cid=? ";
            list.add(condition.getCid().trim());
        }
        List<Product> productList =  qr.query(sql, new BeanListHandler<Product>(Product.class) ,list.toArray());
        return productList;
    }
    
}

1 直接用数组的话,长度又不确定,所以使用了集合

5 修改list.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<HTML>
<HEAD>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="${pageContext.request.contextPath}/css/Style1.css"
    rel="stylesheet" type="text/css" />
<script language="javascript"
    src="${pageContext.request.contextPath}/js/public.js"></script>
<script type="text/javascript"
    src="${pageContext.request.contextPath }/js/jquery-1.11.3.min.js"></script>
<script type="text/javascript">
            function addProduct(){
                window.location.href = "${pageContext.request.contextPath}/adminAddProductUI";
            }
            function delProduct(pid){
                var flag = confirm("你确认要删除吗?");
                /* alert(pid); */
                /* alert(flag); */
                if(flag){
                    location.href="${pageContext.request.contextPath}/delProduct?pid="+pid;
                }
            }
            function editProduct(pid){
                /* alert(pid); */
                location.href="${pageContext.request.contextPath}/adminEditProduct?pid="+pid;
            }
            $(function(){
                $("#cid option[value='${condition.cid}']").prop("selected","selected");
                $("#isHot option[value='${condition.isHot}']").prop("selected","selected");
            });
        </script>
</HEAD>
<body>
    <br>
    <form id="Form1" name="Form1"
        action="${pageContext.request.contextPath}/adminSearchProductList"
        method="post">


        商品名称:<input type="text" name="pname" value="${condition.pname }" /> &nbsp;&nbsp;&nbsp;
        是否热门:<select id="isHot" name="isHot">
            <option value="">不限</option>
            <option value="1"></option>
            <option value="0"></option>
        </select>&nbsp;&nbsp;&nbsp; 商品类别:<select id="cid" name="cid">
            <option value="">不限</option>
            <c:forEach items="${categoryList }" var="category">
                <option value="${category.cid }">${category.cname }</option>
            </c:forEach>
        </select>&nbsp;&nbsp;&nbsp; <input type="submit" value="搜索" />


        <table style="margin-top: 10px" cellSpacing="1" cellPadding="0"
            width="100%" align="center" bgColor="#f5fafe" border="0">
            <TBODY>
                <tr>
                    <td class="ta_01" align="center" bgColor="#afd1f3"><strong>商品列表</strong>
                    </TD>
                </tr>
                <tr>
                    <td class="ta_01" align="right">
                        <button type="button" id="add" name="add" value="添加"
                            class="button_add" onclick="addProduct()">添加</button>

                    </td>
                </tr>
                <tr>
                    <td class="ta_01" align="center" bgColor="#f5fafe">
                        <table cellspacing="0" cellpadding="1" rules="all"
                            bordercolor="gray" border="1" id="DataGrid1"
                            style="BORDER-RIGHT: gray 1px solid; BORDER-TOP: gray 1px solid; BORDER-LEFT: gray 1px solid; WIDTH: 100%; WORD-BREAK: break-all; BORDER-BOTTOM: gray 1px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #f5fafe; WORD-WRAP: break-word">
                            <tr
                                style="FONT-WEIGHT: bold; FONT-SIZE: 12pt; HEIGHT: 25px; BACKGROUND-COLOR: #afd1f3">

                                <td align="center" width="18%">序号</td>
                                <td align="center" width="17%">商品图片</td>
                                <td align="center" width="17%">商品名称</td>
                                <td align="center" width="17%">商品价格</td>
                                <td align="center" width="17%">是否热门</td>
                                <td width="7%" align="center">编辑</td>
                                <td width="7%" align="center">删除</td>
                            </tr>
                            <!-- varStatus 记录第几次遍历 -->
                            <c:forEach items="${productList }" var="product" varStatus="vs">

                                <tr onmouseover="this.style.backgroundColor = 'white'"
                                    onmouseout="this.style.backgroundColor = '#F5FAFE';">
                                    <td style="CURSOR: hand; HEIGHT: 22px" align="center"
                                        width="18%">${vs.count }</td>
                                    <td style="CURSOR: hand; HEIGHT: 22px" align="center"
                                        width="17%"><img width="40" height="45"
                                        src="${pageContext.request.contextPath }/${product.pimage }"></td>
                                    <td style="CURSOR: hand; HEIGHT: 22px" align="center"
                                        width="17%">${product.pname }</td>
                                    <td style="CURSOR: hand; HEIGHT: 22px" align="center"
                                        width="17%">${product.shop_price }</td>
                                    <td style="CURSOR: hand; HEIGHT: 22px" align="center"
                                        width="17%">${product.is_hot==1?"是":"否" }</td>
                                    <td align="center" style="HEIGHT: 22px"><a
                                        href="javascript:void(0)"
                                        onclick="editProduct(${product.pid})"> <img
                                            src="${pageContext.request.contextPath}/images/i_edit.gif"
                                            border="0" style="CURSOR: hand">
                                    </a></td>

                                    <!-- href="javascript:void(0)"让它不跳转 -->
                                    <td align="center" style="HEIGHT: 22px"><a
                                        href="javascript:void(0)" onclick="delProduct(${product.pid})">
                                            <img
                                            src="${pageContext.request.contextPath}/images/i_del.gif"
                                            width="16" height="16" border="0" style="CURSOR: hand">
                                    </a></td>
                                </tr>
                            </c:forEach>
                        </table>
                    </td>
                </tr>

            </TBODY>
        </table>
    </form>
</body>
</HTML>

 6 注意事项

1 debug调试中 ? 占位符一直显示的都是? 不会改变

原文地址:https://www.cnblogs.com/jepson6669/p/8352458.html