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>

效果如下:

原文地址:https://www.cnblogs.com/huxiaocong/p/11103306.html

时间: 2024-10-11 15:49:43

mcv实现通用的增删改查的相关文章

通用DAO之MyBatis封装,封装通用的增删改查(三)

曾将发布过俩篇关于Mybatis封装的文章,当时曾曾承诺过当测试没有问题后阿海会整理一下然后将原代码发布出来. 那么今天正好朋友找我要一份那套mybatis封装的源码,我便整理了一份,想想这么长时间了并没有发现什么明显的bug,于是决定将它发出来. 喜欢的朋友可以在这里下载: http://aiyiupload.oss-cn-beijing.aliyuncs.com/blog/img/2016/06/28/15/6d69ad50-ab53-4f4f-b4e7-1fed010bfdb9.rar 关

通用DAO之MyBatis封装,封装通用的增删改查(二)

曾经发过一篇文章,大概写的就是阿海多么多么厉害,见到某位同事在Hibernate的基础上封装了一下,就以一己之力开发什么什么框架,最后写了个超大的一坨的事. 那么,后续篇来了.阿海不是自负之人,当之前的CRUD框架并没有达到理想的结果时,阿海转向了Mybatis封装.别问我为什么不是Hibernate.我本来就不喜欢Hibernate,即使在之前的一家公司一直被强制性的约束使用Hibernate时,也没有对Hibernate产生什么真正的好感,反而屡次发现了Hibernate的一些问题. 或许是

EF(Entity Framework)通用DBHelper通用类,增删改查以及列表

(1)通用类用法 其中 通用类名:DBhelper 实体类:UserInfo 1 //新增 2 DBHelper<UserInfo> dbhelper = new DBHelper<UserInfo>(); 3 UserInfo userinfo = new UserInfo(); 4 userinfo.Name = "1"; 5 dbhelper.Add(userinfo); 6 7 //根据条件查找列表 8 var entityes = dbhelper.F

封装自己通用的 增删改查的方法 By EF

封装自己的通用CURD By EF using System; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq; using System.Linq.Expressions; using System.Text; using MODEL; namespace ZRFDEMO.DAL { public clas

EF学习笔记——通用增删改查方案

http://blog.csdn.net/leftfist/article/details/25005307 我刚接触EF未久,还不知道它有什么强大之处,但看上去,EF提供了一般的增删改查功能.以往用过一些ORM方法,尽管有代码生成器,但代码量总的 来说比较多.这次采用EF,我就想,能不能尽量写出一些通用的方法,以后添加表.实体类,只需做很少的改动,就能拥有基本的增删改查功能呢? 方案如下: 1. 分为几个部分:BLL.DAL.Model.Interface.其中,EF生成的代码放在Model.

Java连接MySQL数据库增删改查通用方法

Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类下面写好多方法,要是多个数据库,就要写多个类多个方法,导致代码编写太过于繁琐,所以为了改变这样的繁琐,我将连接数据库的方法进行了一系列的封装,使用户传入一个对象值Object就可以得到想要的. 我在之前写过一篇普通的Java连接MySQL数据库,大家可以看看,以便对比参考之后就知道差距了  数据库--MySQL-->Java篇 接下来我给大家讲讲如何将

用DBContext (EF) 实现通用增删改查的REST方法

我们用ADO.NET Entity Data Model来生成实体类后,一般都会对这些类进行基本的增删改查操作,如果每个类都要写这些基本的方法,实在太乏味了.下面就是通过step by step的方式介绍如何用DBContext来实现通用增删改查的REST方法,以及实现过程中容易出现的问题. 1. 打开vs2012,新建一个class library的项目 2. 新加一个ADO.NET Entity Data Model项到这个项目 3. 打开App.Config, 修改res://* 为res

通用mapper的增删改查方法 留存 备忘

Mybatis通用Mapper介绍与使用 前言 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL.而且,当数据库表结构改动时,对应的所有SQL以及实体类都需要更改.这工作量和效率的影响或许就是区别增删改查程序员和真正程序员的屏障.这时,通用Mapper便应运而生-- 什么是通用Mapper 通用Mapper就是为了解决单表增删改查,基于Mybatis的插件.开发人员不需要编写SQL,不需要在DA

MVC+Bootstrap 企业通用框架搭建--左侧导航菜单的实现--导航菜单的增删改查(3)

补充上面的点击菜单表信息: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace SqlServer.Entity{ public class Menu_Operation { private int _operation_id; public int Operation_id { get { return