模糊查询:
——根据传入的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 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 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 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 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();
}
}
效果: