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();
        }
    }

  

效果:

posted @ 2019-07-05 12:42  鸿森  阅读(2269)  评论(0编辑  收藏  举报