模糊查詢:
——根據傳入的name,password屬性列進行查詢
——需要在CustomerDAO接口中定義一個getForListWithCriteriaCustomer(CriteriaCustomer cc).
其中CriteriaCustomer用於封裝查詢條件:name,address,phone。
因為查詢條件很多時候和domain類並不相同,所以要做成一個單獨的類
——拼SQL:
- SQL:"SELECT ID,NAME,PASSWORD FROM CUSTOMER WHERE"+"NAME LIKE ? AND PASSWORD LIKE ? ";
- 為了正確的填充占位符時,重寫了CriteriaCustomer的getter:
——修改Servlet:獲取請求參數;把請求參數封裝為CriteriaCustomer對象,再調用getForListWithCriteriaCustomer(CriteriaCustomer cc)方法
步驟:
1.首先在CustomerDAO接口中添加該方法。
public List<Customer> getListWithCirteriaCustomer(CriteriaCustomer cc);
2.創建一個CriteriaCustomer類,對成員變量進行封裝
package com.mvcapp.entity;
public class CriteriaCustomer {
private String name;
private String password;
public CriteriaCustomer(String name, String password) {
this.name = name;
this.password = password;
}
public CriteriaCustomer() {
}
public String getName() {
if (name == null){
name="%%";
}else{
name="%"+ name +"%";
}
return name;
}
@Override
public String toString() {
return "CriteriaCustomer{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
if (password == null){
password="%%";
}else{
password="%"+ password +"%";
}
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3.在CustomerDAOimpl實現類實現該方法
public List<Customer> getListWithCirteriaCustomer(CriteriaCustomer cc) {
String sql = "SELECT ID,NAME,PASSWORD FROM CUSTOMER WHERE" + " NAME LIKE ? AND PASSWORD LIKE ?";
return getForList(sql,cc.getName(),cc.getPassword());//調用DAO層中方法
}
4.可以對這個實現方法進行一個測試
@Test
public void testGetListWithCriteriaCustomer(){
CriteriaCustomer criteriaCustomer = new CriteriaCustomer("Y",null);
List<Customer> customers = customerDAO.getListWithCirteriaCustomer(criteriaCustomer);
System.out.println(customers);
}
5.修改Servlet,修改query方法
private void query(HttpServletRequest req,HttpServletResponse resp){
String name = req.getParameter("name");
String password = req.getParameter("password");
CriteriaCustomer criteriaCustomer = new CriteriaCustomer(name,password);
List<Customer> list = customerDAO.getListWithCirteriaCustomer(criteriaCustomer);
req.setAttribute("list",list);
try {
req.getRequestDispatcher("/query.jsp").forward(req,resp);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
效果:

