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>

效果如下:

猜你喜欢

转载自www.cnblogs.com/huxiaocong/p/11103306.html
今日推荐