zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    web服务器-Apache
    nginx优化
    nginx下载限速
    nginx-URL重写
    HDU 5358 First One 求和(序列求和,优化)
    HDU 5360 Hiking 登山 (优先队列,排序)
    HDU 5353 Average 糖果分配(模拟,图)
    UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
    HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
    HDU 5344 MZL's xor (水题)
  • 原文地址:https://www.cnblogs.com/afangfang/p/12728305.html
Copyright © 2011-2022 走看看