MVC案例之模糊查询与删除

查询操作:

Servlet
         //1. 调用 CustomerDAO 的 getAll() 得到 Customer 的集合 

         List<Customer> customers = customerDAO.getAll();

         //2. 把 Customer 的集合放入 request 中

         request.setAttribute("customers", customers);

         //3. 转发页面到 index.jsp(不能使用重定向)

         request.getRequestDispatcher("/index.jsp").forward(request, response);

JSP

获取 request 中的 customers 属性

遍历显示

 

1.模糊查询

1).根据传入的 name, address, phone 进行模糊查询

例子: name: a   address: b    phone: 3

         则 SQL 语句的样子为: SELECT id, name, address, phone FROM customers WHERE name LIKE ‘%a%’

          AND address LIKE ‘%b%’ AND phone LIKE ‘%3%’

         需在CustomerDAO接口中定义一个 getForListWithCriteriaCustomer(CriteriaCustomer cc)

         其中 CriteriaCustomer 用于封装查询条件:name, address, phone。

          因为查询条件很多时候和 domain 类并不相同,所以要做成一个单独的类拼 SQL:

         SQL: "SELECT id, name, address, phone FROM customers WHERE  name LIKE ?

          AND address LIKE ? ANDphone LIKE ?";

         为了正确的填充占位符时,重写了 CriteriaCustomer 的 getter:

2).修改 Servlet:获取请求参数;把请求参数封装为CriteriaCustomer 对象,

                          再调用 getForListWithCriteriaCustomer(CriteriaCustomer cc) 方法

2.删除操作

1)超链接:delete.do?id=<%=customer.getId()%>
   Servlet 的 delete 方法:
                          获取 id

                          调用 DAO 执行删除

                          重定向到 query.do(若目标页面不需要读取当前请求的 request 属性,就可以使用重定向),

                         将显示删除后的 Customer 的 List

2).JSP 上的 jQuery 提示:确定要删除 xx 的信息吗?

CustomerDAO

 

package com.aff.mvcapp.dao;

import java.util.List;

import com.aff.mvcapp.domian.Customer;

public interface CustomerDAO {
    public List<Customer> getForListWithCriteriaCustomer(CriteriaCustomer c);
public List<Customer> getAll(); public void save(Customer customer); public Customer get(Integer id); public void delete(Integer id); /** * 返回和 name 相等的记录数 * * @param name * @return */ public long getCountWithName(String name); public void update(Customer customer); }

 

 

 

 

CriteriaCustomer

package com.aff.mvcapp.dao;
public class CriteriaCustomer {
    private String name;
    private String address;
    private String phone;

    public CriteriaCustomer() {
        super();
    }
    public CriteriaCustomer(String name, String address, String phone) {
        super();
        this.name = name;
        this.address = address;
        this.phone = phone;
    }
    public String getName() {
        if (name == null) {
            name = "%%";
        }else 
            name = "%"+name+"%";
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        if (address == null) {
            address = "%%";
        }else 
            address = "%"+address+"%";
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getPhone() {
        if (phone == null) {
            phone = "%%";
        }else 
            phone = "%"+phone+"%";
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    @Override
    public String toString() {
        return "CriteriaCustomer [name=" + name + ", address=" + address + ", phone=" + phone + "]";
    }
}

 

CustomerDAOImpl

 

package com.aff.mvcapp.dao.impl;
import java.util.List;

import com.aff.mvcapp.dao.CriteriaCustomer;
import com.aff.mvcapp.dao.CustomerDAO;
import com.aff.mvcapp.dao.DAO;
import com.aff.mvcapp.domian.Customer;

public class CustomerDAOImpl extends DAO<Customer> implements CustomerDAO {

    @Override
    public List<Customer> getForListWithCriteriaCustomer(CriteriaCustomer c) {
        String sql = "select  id, name, address, phone from  customers where name like ? and address like ? and phone like  ?";
        return getForList(sql, c.getName(), c.getAddress(), c.getPhone());
    }

    @Override
    public List<Customer> getAll() {
        String sql = "select  id, name, address, phone from  customers";
        return getForList(sql);
    }

    @Override
    public void save(Customer customer) {
        String sql = "insert into customers(name,address,phone)values(?,?,?)";
        update(sql, customer.getName(), customer.getAddress(), customer.getPhone());
    }

    @Override
    public Customer get(Integer id) {
        String sql = "select id,name,address,phone from customers where id =?";
        return get(sql, id);
    }

    @Override
    public void delete(Integer id) {
        String sql = "delete from customers where id  = ?";
        update(sql, id);

    }

    @Override
    public long getCountWithName(String name) {
        String sql = "select count(id) from customers where name =?";
        return getForValue(sql, name);
    }

    @Override
    public void update(Customer customer) {
        String sql = "update customers set name = ?,address = ? ,phone = ? where id = ?";
        update(sql, customer.getName(), customer.getAddress(), customer.getPhone(), customer.getId());
    }
}

 

 

 

 

CustomerServlet

package com.aff.mvcapp.servlet;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.aff.mvcapp.dao.CriteriaCustomer;
import com.aff.mvcapp.dao.CustomerDAO;
import com.aff.mvcapp.dao.impl.CustomerDAOImpl;
import com.aff.mvcapp.domian.Customer;

@WebServlet("/customerServlet")
public class CustomerServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private CustomerDAO customerDAO = new CustomerDAOImpl();

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

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 1. 获取ServletPath: /edit.do 或 addCustomer.do
        String servletPath = request.getServletPath();
        // 2.去除 / 和 .do 得到类似于 edit 或 addCustomer 这样的字符串
        String methodName = servletPath.substring(1);
        methodName = methodName.substring(0, methodName.length() - 3);

        try {
            // 3.利用反射获取 methodName 对应的方法
            Method method = getClass().getDeclaredMethod(methodName, HttpServletRequest.class,
                    HttpServletResponse.class);
            // 4.利用反射调用对应的方法
            method.invoke(this, request, response);
        } catch (Exception e) {
            // e.printStackTrace();
            // 可以有一些响应
            response.sendRedirect("error.jsp");
        }
    }

    private void edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("edit");
    }

    private void update(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("update");
    }

    private void query(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String name = request.getParameter("name");
        String address = request.getParameter("address");
        String phone = request.getParameter("phone");

        CriteriaCustomer cc = new CriteriaCustomer(name, address, phone);

        // 1.调用 CustomerDAO 的 getForListWithCriteriaCustomer() 得到 Customer 的集合
        List<Customer> customers = customerDAO.getForListWithCriteriaCustomer(cc);

        // 2.把 Customer 的集合放入 request 中
        request.setAttribute("customers", customers);

        // 3.转发页面到 index.jsp 中( 不能使用重定向)
        request.getRequestDispatcher("/index.jsp").forward(request, response);

    }

    private void delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String idstr = request.getParameter("id");
        int id = 0;
        // try-catch的作用 , 防止恶意的输入, idStr 不能转为int类型,若出异常 id直接为0
        try {
            id = Integer.parseInt(idstr);
            customerDAO.delete(id);
        } catch (Exception e) {
        }
        response.sendRedirect("query.do");
    }
}

 

index.jsp

<%@page import="com.aff.mvcapp.domian.Customer"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="scripts/jquery-1.12.3.js"></script>
<script type="text/javascript">
    $(function() {
        $(".delete").click(function() {
            //找到tr的第二个td也就是name,再获取它的value值
            var content = $(this).parent().parent().find("td:eq(1)").text();
            var flag = confirm("确定要删除" + content + "的信息吗")
            return flag;
        });
    });
</script>
</head>
<body>


    <form action="query.do" method="post">
        <table>
            <tr>
                <td>CustomerNam:</td>
                <td><input type="text" name="name" /></td>
            </tr>
            <tr>
                <td>Address:</td>
                <td><input type="text" name="address" /></td>
            </tr>
            <tr>
                <td>Phone:</td>
                <td><input type="text" name="phone" /></td>
            </tr>
            <tr>
                <td><input type="submit" value="Query" /></td>
                <td><a href="">Add New Customer</a></td>
            </tr>
        </table>
    </form>

    <br />
    <br />
    <br />
    <br />


    <%
        List<Customer> customers = (List<Customer>) request.getAttribute("customers");
        if (customers != null && customers.size() > 0) {
    %>
    <hr>
    <br>
    <br>
    <table border="1" cellpadding="10" cellspacing="0">
        <tr>
            <td>ID</td>
            <td>CustomersName</td>
            <td>Address</td>
            <td>Phone</td>
            <td>UPDATE\DELETE</td>
        </tr>

        <%
            for (Customer customer : customers) {
        %>

        <tr>
            <td><%=customer.getId()%></td>
            <td><%=customer.getName()%></td>
            <td><%=customer.getAddress()%></td>
            <td><%=customer.getPhone()%></td>
            <td><a href="">UPDATE</a> <a
                href="delete.do?id=<%=customer.getId()%>" class="delete">DELETE</a>
            </td>

        </tr>

        <%
            }
        %>

    </table>


    <%
        }
    %>

</body>
</html>

目录

 

posted @ 2020-04-18 21:40  林淼零  阅读(1259)  评论(0编辑  收藏  举报