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