多條件查詢

image.png

當完成的業務(例如搜索時)表單的數據跟我們封裝的數據庫的實體bean不完全對應,應該新建一個實體類,先在src目錄下建包vo(value object)----專門傳遞值

查詢業務難點:sql怎么寫?----拼接
因為頁面的條件不固定導致sql的where條件不固定

image.png

trim()的作用是去掉字符串兩端的多余的空格,注意,是兩端的空格,且無論兩端的空格有多少個都會去掉

StringBuffer的常用方法
StringBuffer類中的方法主要偏重于對于字符串的變化,例如追加、插入和刪除等,這個也是StringBuffer和String類的主要區別。
append方法:該方法的作用是追加內容到當前StringBuffer對象的末尾,類似于字符串的連接
StringBuffer sb = new StringBuffer(“abc”);
sb.append(true);
則對象sb的值將變成”abctrue”

deleteCharAt方法:該方法的作用是刪除指定位置的字符,然后將剩余的內容形成新的字符串。
insert方法:該方法的作用是在StringBuffer對象中插入內容,然后形成新的字符串

數組與集合可當容器,集合不固定大小,數組固定大小。
Obiect[] obj = new Object[n];
List<String> list = new ArrayList<String>();

實體類Condition:

package com.zys.vo;

public class Condition {
    private String pname;
    private String is_hot;
    private String cid;
    
    public String getPname() {
        return pname;
    }
    public void setPname(String pname) {
        this.pname = pname;
    }
    public String getIs_hot() {
        return is_hot;
    }
    public void setIs_hot(String is_hot) {
        this.is_hot = is_hot;
    }
    public String getCid() {
        return cid;
    }
    public void setCid(String cid) {
        this.cid = cid;
    }
    
}

web層servlet代碼:

package com.zys.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 com.zys.domain.Category;
import com.zys.domain.Product;
import com.zys.service.AdminProductCategoryService;
import com.zys.service.AdminSearchProductService;
import com.zys.vo.Condition;

public class AdminSearchProductServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        
        //1.收集表單數據,
        Map<String, String[]> properties = request.getParameterMap();
        //2.將散裝的數據封裝到一個實體中
        Condition condition = new Condition();
        try {
            BeanUtils.populate(condition, properties);
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //3.將實體傳遞給service層
        AdminSearchProductService service = new AdminSearchProductService();
        List<Product> adminProductList = null;
        try {
            adminProductList = service.searchProductByCondition(condition);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        //4.準備商品類別
        //獲得所有商品類別信息
        AdminProductCategoryService service1 = new AdminProductCategoryService();
        
        List<Category> categoryList = null;
        try {
            categoryList = service1.findAllCategory();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        request.setAttribute("categoryList", categoryList);
        
        request.setAttribute("condition", condition);
        
        //將返回的product數據保存到request域
        request.setAttribute("adminProductList", adminProductList);
        //轉發數據到jsp頁面
        request.getRequestDispatcher("/admin/product/list.jsp").forward(request, response);
        
    }

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

service層代碼:

package com.zys.service;

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

import com.zys.dao.AdminSearchProductDao;
import com.zys.domain.Product;
import com.zys.vo.Condition;

public class AdminSearchProductService {

    public List<Product> searchProductByCondition(Condition condition) throws SQLException {
        // 無復雜業務,將數據傳遞到dao層
        AdminSearchProductDao dao = new AdminSearchProductDao();
        return dao.searchProductByCondition(condition);
        
    }

}

dao層代碼:

package com.zys.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.BeanListHandler;

import com.zys.domain.Product;
import com.zys.utils.DataSourceUtils;
import com.zys.vo.Condition;

public class AdminSearchProductDao {

    public List<Product> searchProductByCondition(Condition condition) throws SQLException {
        // 操作數據庫,根據參數Condition的條件完成搜索
        QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
        //定義一個存儲實際參數的容器
        List<String> list = new ArrayList<String>();
        //定義一個StringBuffer,方便對字符串修改
        StringBuffer sql = new StringBuffer("select * from product where 1=1");
        if(condition.getPname()!=null&&!condition.getPname().trim().equals("")){
            sql.append(" and pname like ?");
            list.add("%"+condition.getPname()+"%");
        }
        if(condition.getIs_hot()!=null&&!condition.getIs_hot().trim().equals("")){
            sql.append(" and is_hot=?");
            list.add(condition.getIs_hot());
        }
        if(condition.getCid()!=null&&!condition.getCid().trim().equals("")){
            sql.append(" and cid=?");
            list.add(condition.getCid());
        }
        List<Product> productList = runner.query(sql.toString(), new BeanListHandler<Product>(Product.class), list.toArray());
        return productList;
    }

}

多條件查詢dao層實現:

image.png
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容