• 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>UPDATEDELETE</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>

    目录

    All that work will definitely pay off
  • 相关阅读:
    10.7
    10.5
    周六
    周五
    周四
    周三
    四则运算
    zabbix——yum安装
    Stirling's Formula
    CONTRASTIVE REPRESENTATION DISTILLATION
  • 原文地址:https://www.cnblogs.com/afangfang/p/12728305.html
Copyright © 2020-2023  润新知