• mcv实现通用的增删改查


    在mvc框架和前一次通用分页的基础上,我们可以完善一下,把它做成一个通用的增删改查

    话不多说直接上代码:

    先创建一个与数据库表名对应的实体类Book:

    package com.entity;
    
    public class Book {
        private int bid;
        private String bname;
        private float price;
    
        @Override
        public String toString() {
            return "Book [bid=" + bid + ", bname=" + bname + ", price=" + price + "]";
        }
    
        public int getBid() {
            return bid;
        }
    
        public void setBid(int bid) {
            this.bid = bid;
        }
    
        public String getBname() {
            return bname;
        }
    
        public void setBname(String bname) {
            this.bname = bname;
        }
    
        public float getPrice() {
            return price;
        }
    
        public void setPrice(float price) {
            this.price = price;
        }
    
        public Book(int bid, String bname, float price) {
            super();
            this.bid = bid;
            this.bname = bname;
            this.price = price;
        }
    
        public Book() {
            super();
        }
    
    }

    创建一个执行sql语句的BaseDao:

    package com.dao;
    
    import java.lang.reflect.Field;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.util.DBAccess;
    import com.util.PageBean;
    
    /**
     * T代表你要对哪个实体类对应表进行查询
     * 
     * @author Administrator
     *
     * @param <T>
     */
    public class BaseDao<T> {
     
        /**
         * 
         * @param sql 查询不同的实体类,那么对应的sql不同,所以需要传递 
         * @param clz  生产出不同的实体类对应的实例,然后装进list容器中返回
         * @param pageBean  决定是否分页
         * @return
         * @throws Exception 
         */
        public List<T> executeQuery(String sql,Class clz,PageBean pageBean) throws Exception{
            
            Connection con=DBAccess.getConnection();
            PreparedStatement ps=null;
            ResultSet rs=null;
           if(pageBean!=null&&pageBean.isPagination()) {
               //需要分页(算符合条件的总记录数)
               String countSql=getCountSql(sql);
               ps=con.prepareStatement(countSql);
               rs=ps.executeQuery();
               if(rs.next()) {
                   pageBean.setTotal(rs.getLong(1)+"");
               }
               //查询出符合条件的结果集
               String pageSql=getpageSql(sql,pageBean);
               ps=con.prepareStatement(pageSql);
               rs=ps.executeQuery();
               
           }else {
               ps=con.prepareStatement(sql);
               rs=ps.executeQuery();
           }
            
            
            
            
            List<T> list=new ArrayList<T>();
            T t;
            while(rs.next()) {
            /**
             * 1.实例化一个book对象(该对象是空的)
             * 2.取book的所有的属性,然后给其赋值
             *  2.1获取所有属性对象
             *  2.2给属性对象赋值
             * 3.赋完值的book对象装进list容器中
             */
            t=(T)clz.newInstance();
                Field[] fields=clz.getDeclaredFields();
                for (Field field : fields) {
                    field.setAccessible(true);
                    field.set(t, rs.getObject(field.getName()));
                }
                list.add(t);
            }
            DBAccess.close(con, ps, rs);
            return list;
        }
       
        /**
         * 利用原生sql拼接出符合条件的结果集的sql
         * @param sql
         * @param pageBean
         * @return
         */
        private String getpageSql(String sql, PageBean pageBean) {
            // TODO Auto-generated method stub
            return sql+" limit "+pageBean.getStartIndex()+","+pageBean.getRows();
        }
    
        /**
         * 获取符合条件的总记录数的sql
         * @param sql
         * @return
         */
        private String getCountSql(String sql) {
          
            
            return "SELECT COUNT(1)FROM ("+sql+")t";
        }
        
        /**
         * 
         * @param sql 决定增删改的一种
         * @param attrs 决定?位置 new String[]{"bid,"bname"}
         * @param t 要操作的实体
         * @return
         * @throws Exception 
         * @throws NoSuchFieldException 
         */
        public int executeUpdate (String sql,String[] attrs,T t) throws NoSuchFieldException, Exception {
            Connection con=DBAccess.getConnection();
            PreparedStatement ps=con.prepareStatement(sql);
            for(int i=1;i<=attrs.length;i++) {
            Field f=t.getClass().getDeclaredField(attrs[i-1]);
            f.setAccessible(true);
            ps.setObject(i, f.get(t));
            }
            int num=ps.executeUpdate();
            DBAccess.close(con, ps, null);
            
            return num;
        }
         
        
    }

    创建一个提供sql语句的BookDao:

    package com.dao;
    
    import java.util.List;
    
    import com.entity.Book;
    import com.util.BaseDao;
    import com.util.PageBean;
    import com.util.StringUtils;
    
    public class BookDao extends BaseDao<Book> {
        /**
         * 查询所有
         * 
         * @param book
         * @param pageBean
         * @return
         * @throws Exception
         */
        public List<Book> list(Book book, PageBean pageBean) throws Exception {
            String sql = "select * from t_mvc_book where true";
            String bname = book.getBname();
            int bid = book.getBid();
            if (StringUtils.isNotBlank(bname)) {
                sql += " and bname like '%" + bname + "%'";
            }
            if (bid != 0) {
                sql += " and bid=" + bid;
            }
            return super.executeQuery(sql, Book.class, pageBean);
    
        }
    
        /**
         * 修改
         * 
         * @param book
         * @return
         * @throws Exception
         * @throws NoSuchFieldException
         */
        public int upde(Book book) throws NoSuchFieldException, Exception {
            String sql = "update t_mvc_book set bname=?,price=? where bid=?";
            return super.executeUpdate(sql, new String[] { "bname", "price", "bid" }, book);
        }
    
        /**
         * 新增
         * 
         * @param book
         * @return
         * @throws Exception
         * @throws NoSuchFieldException
         */
        public int add(Book book) throws NoSuchFieldException, Exception {
            String sql = "insert into t_mvc_book values(?,?,?)";
            System.out.println(sql);
            return super.executeUpdate(sql, new String[] { "bid", "bname", "price" }, book);
        }
    
        /**
         * 删除
         * 
         * @param book
         * @return
         * @throws Exception
         * @throws NoSuchFieldException
         */
        public int del(Book book) throws NoSuchFieldException, Exception {
            String sql = "delete from t_mvc_book where bid=?";
    
            return super.executeUpdate(sql, new String[] { "bid" }, book);
        }
    }

    执行类BookAction:

    package com.web;
    
    import java.util.List;
    
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.dao.BookDao;
    import com.entity.Book;
    import com.framework.ActionSupport;
    import com.framework.ModelDrivern;
    import com.util.PageBean;
    
    public class BookAction extends ActionSupport implements ModelDrivern<Book> {
        private Book book = new Book();
        private BookDao bookdao = new BookDao();
    
        /**
         * 分页查询
         * 
         * @param request
         * @param response
         * @return
         * @throws Exception
         */
    
        public String list(HttpServletRequest request, HttpServletResponse response) throws Exception {
            PageBean pageBean = new PageBean();
            pageBean.setRequest(request);
            List<Book> list = this.bookdao.list(book, pageBean);
            request.setAttribute("booklist", list);
            request.setAttribute("pagebean", pageBean);
            return "list";
        }
    
        /**
         * 
         * 跳转到增加或修改页面
         * 
         * @param request
         * @param response
         * @return
         * @throws Exception
         */
        public String preSave(HttpServletRequest request, HttpServletResponse response) {
            // bid的类型是int类型,而int类型的默认值是0,如果jsp未传递bid的参数值那么bid=0;
            if (book.getBid() == 0) {
                System.out.println("增加逻辑");
    
            } else {
                // 修改数据回显
                Book b;
                try {
                    b = this.bookdao.list(book, null).get(0);
                    request.setAttribute("book", b);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
            }
            return "edit";
    
        }
    
        /**
         * 新增
         * 
         * @param request
         * @param response
         * @return
         * @throws Exception
         */
        public String add(HttpServletRequest request, HttpServletResponse response) throws Exception {
            // 新增完了之后刷新页面
            this.bookdao.add(book);
            return "tolist";
    
        }
    
        /**
         * 修改
         * 
         * @param request
         * @param response
         * @return
         * @throws Exception
         */
        public String upde(HttpServletRequest request, HttpServletResponse response) throws Exception {
            // 修改完了之后刷新页面
            this.bookdao.upde(book);
            return "tolist";
    
        }
        /**
         * 删除
         * 
         * @param request
         * @param response
         * @return
         * @throws Exception
         */
        public String del(HttpServletRequest request, HttpServletResponse response) throws Exception {
            // 删除之后刷新页面
            this.bookdao.del(book);
            return "tolist";
        }
    
        @Override
        public Book getModel() {
            // TODO Auto-generated method stub
            return book;
        }
    
    }

    xml文件配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
      <display-name>MVC</display-name>
     
      <servlet>
      <servlet-name>DispatcherServlet</servlet-name>
      <servlet-class>com.framework.DispatcherServlet</servlet-class>
      <init-param>
      <param-name>xmlPath</param-name>
      <param-value>/mvc.xml</param-value>
      </init-param>
      </servlet>
      <servlet-mapping>
      <servlet-name>DispatcherServlet</servlet-name>
      <url-pattern>*.action</url-pattern>
      </servlet-mapping>
    </web-app>

    jsp主页面页面book.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@page isELIgnored="false" %>
        <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
        <%@taglib prefix="m"  uri="/MyJSP"%>
    <!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>
    </head>
    <body>
    <h2>小说目录</h2>
        <br>
    <c:if test="${empty booklist }">
        <jsp:forward page="book.action?menthodName=list"></jsp:forward>
    </c:if>
        <form action="${pageContext.request.contextPath}/book.action?menthodName=list"
            method="post">
            书名:<input type="text" name="bname"> <input type="submit"
                value="确定">
                
        </form>
        <a href="${pageContext.request.contextPath}/book.action?menthodName=preSave">新增</a>
        
        <table border="1" width="100%">
            <tr>
                <td>编号</td>
                <td>名称</td>
                <td>价格</td>
                <td>操作</td>
            </tr>
            <c:forEach items="${booklist }" var="b">
                <tr>
                    <td>${b.bid }</td>
                    <td>${b.bname }</td>
                    <td>${b.price }</td>
                    <td><a href="${pageContext.request.contextPath}/book.action?menthodName=preSave&&bid=${b.bid}">修改</a>
                    </td>
                    <td><a href="${pageContext.request.contextPath}/book.action?menthodName=del&&bid=${b.bid}">删除</a>
                    </td>
                </tr>
            </c:forEach>
        </table>
    <m:page bean="${pagebean }"></m:page> 
    
        
    </body>
    </html>

    增,改通用的bookList.lsp页面:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@page isELIgnored="false"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@taglib prefix="m" uri="/MyJSP"%>
    <!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>
    </head>
    <body>
        <h2>小说目录</h2>
        <br>
        <c:if test="${empty booklist }">
            <jsp:forward page="book.action?menthodName=list"></jsp:forward>
        </c:if>
        <form
            action="${pageContext.request.contextPath}/book.action?menthodName=list"
            method="post">
            书名:<input type="text" name="bname"> <input type="submit"
                value="确定">
    
        </form>
        <a
            href="${pageContext.request.contextPath}/book.action?menthodName=preSave">新增</a>
    
        <table border="1" width="100%">
            <tr>
                <td>编号</td>
                <td>名称</td>
                <td>价格</td>
                <td>操作</td>
            </tr>
            <c:forEach items="${booklist }" var="b">
                <tr>
                    <td>${b.bid }</td>
                    <td>${b.bname }</td>
                    <td>${b.price }</td>
                    <td><a
                        href="${pageContext.request.contextPath}/book.action?menthodName=preSave&&bid=${b.bid}">修改</a>
                    </td>
                    <td><a
                        href="${pageContext.request.contextPath}/book.action?menthodName=del&&bid=${b.bid}">删除</a>
                    </td>
                </tr>
            </c:forEach>
        </table>
        <m:page bean="${pagebean }"></m:page>
    
    
    </body>
    </html>

    效果如下:

  • 相关阅读:
    如何获取地址栏中的参数
    Ajax基础知识
    什么是BFC
    111
    不定宽 块状元素居中3
    POJ 2104主席树
    可持久化数据结构之主席树
    线段树
    Splay 学习
    hello world
  • 原文地址:https://www.cnblogs.com/huxiaocong/p/11103306.html
Copyright © 2020-2023  润新知