mvc自定义框架(下)之增删改查

使用自定义mvc框架完成CRUD操作

jsp
action
test
dao
entity
db

代码演示

根据自定义mvc框架(上)基础写自定义mvc框架的增删改查
在这里插入图片描述
需要用到的jar包分享:

链接:https://pan.baidu.com/s/1LeylcQcHWY3NBel67jFVFg
提取码:3xu6

需要用到数据库,我用的是mysql

导需要用的jar包,有如下:
在这里插入图片描述

实体类Book:

package com.myy.entity;

public class Book {
	private int bid;
	private String bname;
	private float price;

	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();
	}
	
}

创建tld文件:
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    
  <description>myy 1.1 core library</description>
  <display-name>myy core</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>c</short-name>
  <uri>/myy</uri>

  <tag>
  <!-- 填写的是标签库中的标签 -->
    <name>page</name>
    <!-- 标签对应的后台助手类(每在页面上写标签都会去访问后台代码) -->
    <tag-class>com.myy.tag.PageTag</tag-class>
   <!-- 标签类别 -->
    <body-content>JSP</body-content>
    <attribute>
    <!-- 自定义标签中的属性 -->
        <name>pageBean</name>
        <!-- 属性值是否必填 -->
        <required>true</required>
        <!-- 是否支持表达式EL表达式/ognl表达式 -->
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
  
  
</taglib>

工具类
在这里插入图片描述
BaseDao

package com.myy.util;

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;


/**
 * 用来处理所有的增删改查的基类
 * 
 * 查询指的是 通用分页查询
 * @author myy
 *
 * @param <T>
 */
public class BaseDao<T> {
	
	/**
	 * @param sql 可能不同的表,那么意味着sql是变化的,那么它是从子类处理好再传递到父类
	 * @param clz  需要返回不同的对象集合  Book.class/Order.class
	 * @param pageBean  可能要分页
	 * @return
	 * @throws SQLException
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public List<T> executeQuery(String sql,Class clz,PageBean pageBean) throws SQLException, InstantiationException, IllegalAccessException{
		List<T> list = new ArrayList<>();
		Connection con = DBAccess.getConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		if(pageBean != null && pageBean.isPagination()) {
//			分页代码
			/*
			 * 1.分页是与pagebean中total,意味着需要查询数据库得到total赋值给pagebean
			 * 2.查询出符合条件的某一页数据
			 * 
			 */
//			select count(*) from (select * from t_mvc_book where bname like '%圣墟%') t;
			String countSql = getCountSql(sql);
			ps = con.prepareStatement(countSql);
			rs = ps.executeQuery();
			if(rs.next()) {
				pageBean.setTotal(rs.getObject(1).toString());
			}
//			select * from t_mvc_book where bname like '%圣墟%' limit 0,10
			String pageSql = getpageSql(sql, pageBean);
			ps = con.prepareStatement(pageSql);
			rs = ps.executeQuery();
		}else {
//			不分页代码
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
		}
		
		T t = null;
		while(rs.next()) {
			t = (T) clz.newInstance();
			Field[] fields = clz.getDeclaredFields();
			for (Field f : fields) {
//				赋值之前打开访问权限
				f.setAccessible(true);
				f.set(t, rs.getObject(f.getName()));
			}
			list.add(t);
		}
//		关闭资源(否则会出现太多连接错误)
		DBAccess.close(con, ps, rs);
		return list;
		
	}

	private String getpageSql(String sql,PageBean pageBean) {
		return sql + " limit "+pageBean.getStartIndex()+","+pageBean.getRows();
	}

	private String getCountSql(String sql) {
		
		return "select count(1) from ("+sql+") t";
	}
	
	/**
	 * @param sql 增删改sql语句
	 * @param attrs 代表了sql语句中的问号 bid,bname,price
	 * @param t  实体类(里面包含了参数值)
	 * @return
	 * @throws SQLException 
	 * @throws IllegalAccessException 
	 * @throws IllegalArgumentException 
	 * @throws SecurityException 
	 * @throws NoSuchFieldException 
	 */
	public int executeUpdate(String sql,String[] attrs,T t) throws IllegalArgumentException, IllegalAccessException, SQLException, NoSuchFieldException, SecurityException {
		Connection con = DBAccess.getConnection();
    	PreparedStatement ps =con.prepareStatement(sql);
//    	ps.setInt(1,book.getBid());
//    	ps.setString(2,book.getBname());
//    	ps.setFloat(3,book.getPrice());
    	//用反射(一切反射相关的代码是从获取类开始)
    	//获取所有属性
    	Field fields = null;
    	for (int i = 0; i < attrs.length; i++) {
    		//打开权限
    		fields = t.getClass().getDeclaredField(attrs[i]);
    		fields.setAccessible(true);
			ps.setObject(i+1, fields.get(t));
		}
    	int num = ps.executeUpdate();
    	DBAccess.close(con, ps, null);
		return num;
	}

}

DBAccess

package com.myy.util;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * 提供了一组获得或关闭数据库对象的方法
 * 
 */
public class DBAccess {
	private static String driver;
	private static String url;
	private static String user;
	private static String password;

	static {// 静态块执行一次,加载 驱动一次
		try {
			InputStream is = DBAccess.class
					.getResourceAsStream("config.properties");

			Properties properties = new Properties();
			properties.load(is);

			driver = properties.getProperty("driver");
			url = properties.getProperty("url");
			user = properties.getProperty("user");
			password = properties.getProperty("pwd");

			Class.forName(driver);
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

	/**
	 * 获得数据连接对象
	 * 
	 * @return
	 */
	public static Connection getConnection() {
		try {
			Connection conn = DriverManager.getConnection(url, user, password);
			return conn;
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

	public static void close(ResultSet rs) {
		if (null != rs) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
	}

	public static void close(Statement stmt) {
		if (null != stmt) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
	}

	public static void close(Connection conn) {
		if (null != conn) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
				throw new RuntimeException(e);
			}
		}
	}

	public static void close(Connection conn, Statement stmt, ResultSet rs) {
		close(rs);
		close(stmt);
		close(conn);
	}

	public static boolean isOracle() {
		return "oracle.jdbc.driver.OracleDriver".equals(driver);
	}

	public static boolean isSQLServer() {
		return "com.microsoft.sqlserver.jdbc.SQLServerDriver".equals(driver);
	}
	
	public static boolean isMysql() {
		return "com.mysql.jdbc.Driver".equals(driver);
	}

	public static void main(String[] args) {
		Connection conn = DBAccess.getConnection();
		DBAccess.close(conn);
		System.out.println("isOracle:" + isOracle());
		System.out.println("isSQLServer:" + isSQLServer());
		System.out.println("isMysql:" + isMysql());
		System.out.println("数据库连接(关闭)成功");
	}
}

EncodingFiter

package com.myy.util;

import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 中文乱码处理
 * 
 */
public class EncodingFiter implements Filter {

	private String encoding = "UTF-8";// 默认字符集

	public EncodingFiter() {
		super();
	}

	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse res = (HttpServletResponse) response;

		// 中文处理必须放到 chain.doFilter(request, response)方法前面
		res.setContentType("text/html;charset=" + this.encoding);
		if (req.getMethod().equalsIgnoreCase("post")) {
			req.setCharacterEncoding(this.encoding);
		} else {
			Map map = req.getParameterMap();// 保存所有参数名=参数值(数组)的Map集合
			Set set = map.keySet();// 取出所有参数名
			Iterator it = set.iterator();
			while (it.hasNext()) {
				String name = (String) it.next();
				String[] values = (String[]) map.get(name);// 取出参数值[注:参数值为一个数组]
				for (int i = 0; i < values.length; i++) {
					values[i] = new String(values[i].getBytes("ISO-8859-1"),
							this.encoding);
				}
			}
		}

		chain.doFilter(request, response);
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		String s = filterConfig.getInitParameter("encoding");// 读取web.xml文件中配置的字符集
		if (null != s && !s.trim().equals("")) {
			this.encoding = s.trim();
		}
	}

}

PageBean

package com.myy.util;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

/**
 * 分页工具类
 *
 */
public class PageBean {

	private int page = 1;// 页码

	private int rows = 10;// 页大小

	private int total = 0;// 总记录数

//	保留上一次的请求地址
	private String url;
//	保留上一次请求所携带的参数
	private Map<String, String[]> paMap = new HashMap<>();
	
	/**
	 * pageBean初始化
	 * @param req
	 */
	public void setRequest(HttpServletRequest req) {
		//改变它第几页的数据
		this.setPage(req.getParameter("page"));
		//改变它每页展示的数据
		this.setRows(req.getParameter("rows"));
		//控制页面是否分页
		this.setPagination(req.getParameter("pagination"));
		
		this.setUrl(req.getRequestURL().toString());
		this.setPaMap(req.getParameterMap());
	}
	
	public void setPagination(String parameter) {
//		当你填false就不分页
		if("false".equals(pagination)) {
			this.setPagination(false);
		}
	}

	public void setRows(String rows) {
		if(StringUtils.isNotBlank(rows)) {
			this.setRows(Integer.valueOf(rows));
		}
	}

	public void setPage(String page) {
//		如果不为空的时候
		if(StringUtils.isNotBlank(page)){
			this.setPage(Integer.valueOf(page));
		}
	}
	
	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}


	public Map<String, String[]> getPaMap() {
		return paMap;
	}

	public void setPaMap(Map<String, String[]> paMap) {
		this.paMap = paMap;
	}


	private boolean pagination = true;// 是否分页

	public PageBean() {
		super();
	}

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}

	public int getRows() {
		return rows;
	}

	public void setRows(int rows) {
		this.rows = rows;
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}

	public void setTotal(String total) {
		this.total = Integer.parseInt(total);
	}

	public boolean isPagination() {
		return pagination;
	}

	public void setPagination(boolean pagination) {
		this.pagination = pagination;
	}

	/**
	 * 获得起始记录的下标
	 * 
	 * @return
	 */
	public int getStartIndex() {
		return (this.page - 1) * this.rows;
	}

	@Override
	public String toString() {
		return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";
	}

    /**
     * 最大页码
     * @return
     */
    public int getMaxPage() {
		return this.total % this.rows == 0 ? this.total/this.rows : this.total/this.rows + 1;
	}

	
	/**
	 * 获取下一页
	 * @return
	 */
	public int getNextPage() {
		return this.page < this.getMaxPage() ? this.page+1 : this.page;
	}
	
     /**
      * 上一页
     * @return
     */
    public int getPreviousPage() {
		
		return this.page > 1 ? this.page-1 : this.page;
	}

}

StringUtils

package com.myy.util;

public class StringUtils {
	// 私有的构造方法,保护此类不能在外部实例化
	private StringUtils() {
	}

	/**
	 * 如果字符串等于null或去空格后等于"",则返回true,否则返回false
	 * 
	 * @param s
	 * @return
	 */
	public static boolean isBlank(String s) {
		boolean b = false;
		if (null == s || s.trim().equals("")) {
			b = true;
		}
		return b;
	}
	
	/**
	 * 如果字符串不等于null或去空格后不等于"",则返回true,否则返回false
	 * 
	 * @param s
	 * @return
	 */
	public static boolean isNotBlank(String s) {
		return !isBlank(s);
	}

}

在这里插入图片描述

#oracle9i
#driver=oracle.jdbc.driver.OracleDriver
#url=jdbc:oracle:thin:@localhost:1521:ora9
#user=test
#pwd=test


#sql2005
#driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
#url=jdbc:sqlserver://localhost:1423;DatabaseName=test
#user=sa
#pwd=sa


#sql2000
#driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
#url=jdbc:microsoft:sqlserver://localhost:1433;databaseName=unit6DB
#user=sa
#pwd=888888


#mysql5
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db_xm?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
user=root
pwd=123




分页PageTag:

package com.myy.tag;

import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

import com.myy.util.PageBean;

public class PageTag extends BodyTagSupport{

	private static final long serialVersionUID = 7683589591625400163L;

	private PageBean pageBean;

	public PageBean getPageBean() {
		return pageBean;
	}

	public void setPageBean(PageBean pageBean) {
		this.pageBean = pageBean;
	}
	
	@Override
	public int doStartTag() throws JspException {
		JspWriter out = pageContext.getOut();
		try {
			out.print(toHTML());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return SKIP_BODY;
	}

	private String toHTML() {
//		可变的字符串容器
		StringBuilder sb = new StringBuilder();
		
//		拼接下一次所分页请求所提交的分页表单
		sb.append("<form id='pageBeanForm' action='"+pageBean.getUrl()+"' method='post'>");
		sb.append("<input type='hidden' name='page'>");
		Map<String, String[]> paMap = pageBean.getPaMap();
		if(paMap != null && paMap.size()>0) {
			Set<Entry<String,String[]>> entrySet = paMap.entrySet();
			for (Entry<String, String[]> entry : entrySet) {
				for(String value : entry.getValue()) {
					if(!"page".equals(entry.getKey()))
				sb.append("<input type='hidden' name='"+entry.getKey()+"' value='"+value+"' >");
			}
		}
		}
		
		sb.append("</form>");
		
//		拼接分页条
		sb.append("<div style='text-align: right; font-size: 12px;'>");
		sb.append("每页"+pageBean.getRows()+"条,共"+pageBean.getTotal()+"条,第"+pageBean.getPage()+"页,共"+pageBean.getMaxPage()+"页&nbsp;&nbsp;<a href='javascript:gotoPage(1)'>首页</a>&nbsp;&nbsp;<a ");
		sb.append(" href='javascript:gotoPage("+pageBean.getPreviousPage()+")'>上一页</a>&nbsp;&nbsp;<a ");
		sb.append(" href='javascript:gotoPage("+pageBean.getNextPage()+")'>下一页</a>&nbsp;&nbsp;<a ");
		sb.append(" href='javascript:gotoPage("+pageBean.getMaxPage()+")'>尾页</a>&nbsp;&nbsp;<input type='text' ");
		sb.append(" id='skipPage' ");
		sb.append("  style='text-align: center; font-size: 12px; width: 50px;'>&nbsp;&nbsp;<a ");
		sb.append(" href='javascript:skipPage()'>Go</a> ");
		sb.append(" </div> ");
		
//		拼接分页的javascript代码
		sb.append("<script type='text/javascript'>");
		sb.append(" function gotoPage(page) { ");
		sb.append("  document.getElementById('pageBeanForm').page.value = page; ");
		sb.append(" document.getElementById('pageBeanForm').submit(); ");
		sb.append(" } ");
		sb.append("  function skipPage() { ");
		sb.append(" var page = document.getElementById('skipPage').value; ");
		sb.append(" if(!page || isNaN(page) || parseInt(page)<1 || parseInt(page)>"+pageBean.getMaxPage()+"){ ");
		sb.append(" alert('请输入1~N的数字'); ");
		sb.append("  return; ");
		sb.append(" } ");
		sb.append("   gotoPage(page); ");
		sb.append(" } ");
		sb.append("</script>");
		
		return sb.toString();
	}
}

配置web.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>my_mvc</display-name>
  <!-- 中文乱码 -->
  <filter>
    <filter-name>encodingFiter</filter-name>
    <filter-class>com.myy.util.EncodingFiter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>encodingFiter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
 <servlet>
   <servlet-name>dispatecherServlet</servlet-name>
   <servlet-class>com.myy.framework.DispatecherServlet</servlet-class>
  <!--自己配置,不用配置默认的  -->
  <init-param>
      <param-name>mvcXmlLocation</param-name>
      <param-value>/mvc.xml</param-value>
   </init-param> 
 </servlet>
 <servlet-mapping>
  <servlet-name>dispatecherServlet</servlet-name>
  <url-pattern>*.action</url-pattern>
 </servlet-mapping>
</web-app>

BookDao

package com.myy;

import java.sql.*;
import java.util.List;

import com.myy.entity.Book;
import com.myy.util.*;

public class BookDao extends BaseDao<Book>{
	

    /**
     * 分页查询
     * @param book
     * @param pageBean
     * @return
     * @throws SQLException 
     * @throws IllegalAccessException 
     * @throws InstantiationException 
     */
    public List<Book> list(Book book,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
    	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 SQLException 
     * @throws IllegalAccessException 
     * @throws IllegalArgumentException 
     * @throws SecurityException 
     * @throws NoSuchFieldException 
     */
    public int add(Book book) throws SQLException, IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
    	String sql="insert into t_mvc_book values(?,?,?)";
        return super.executeUpdate(sql, new String[] {"bid","bname","price"}, book);
    }
    
    
    /**
     * 修改
     * @param book
     * @return
     * @throws SQLException
     * @throws IllegalAccessException 
     * @throws IllegalArgumentException 
     * @throws SecurityException 
     * @throws NoSuchFieldException 
     */
    public int edit(Book book) throws SQLException, IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
    	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 SQLException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     * @throws SecurityException 
     * @throws NoSuchFieldException 
     */
    public int del(Book book) throws SQLException, IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
    	String sql = "delete from t_mvc_book where bid = ?";
    	return super.executeUpdate(sql, new String[] {"bid"}, book);
    }
    
//    public static void main(String[] args) {
//		BookDao bookDao = new BookDao();
//		Book book = new Book(12372,"xxx",56f);
//		try {
//			bookDao.add(book);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		
//	}
}


BookAction

package com.myy.web;

import java.sql.SQLException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.myy.BookDao;
import com.myy.entity.Book;
import com.myy.framework.ActionSupport;
import com.myy.framework.ModelDriven;
import com.myy.util.PageBean;

public class BookAction extends ActionSupport implements ModelDriven<Book>{
    private Book book = new Book();
    private BookDao bookDao = new BookDao();
    
    public String list(HttpServletRequest req,HttpServletResponse resp) {
		PageBean pageBean = new PageBean();
		pageBean.setRequest(req);
		try {
			List<Book> list = this.bookDao.list(book, pageBean);
			req.setAttribute("bookList", list);
			req.setAttribute("pageBean", pageBean);
		} catch (InstantiationException | IllegalAccessException | SQLException e) {
			e.printStackTrace();
		}
    	
    	return "list";
    	
    }
    
    /**
     * 跳转新增修改页面(新增修改页面是同一个)
     * @param req
     * @param resp
     * @return
     */
    public String preSave(HttpServletRequest req,HttpServletResponse resp) {
      //修改
//    	System.out.println(book.getBid());
//    	System.out.println(req.getParameter("bid"));
//    	book.setBid(Integer.valueOf(req.getParameter("bid")));
    	if(book.getBid() != 0) {
    	   try {
    		//数据回显的数据
			Book b = this.bookDao.list(book, null).get(0);
			req.setAttribute("book", b);
		} catch (InstantiationException | IllegalAccessException | SQLException e) {
			e.printStackTrace();
		}
       }
    	
    	return "edit";
    	
    }
    
    /**
     * 增加
     * @param req
     * @param resp
     * @return
     * @throws SecurityException 
     * @throws NoSuchFieldException 
     */
    public String add(HttpServletRequest req,HttpServletResponse resp) throws NoSuchFieldException, SecurityException {
    	try {
			this.bookDao.add(book);
		} catch (IllegalArgumentException | IllegalAccessException | SQLException e) {
			e.printStackTrace();
		}
    	return "toList";
    }
    
     /**
      * 修改
     * @param req
     * @param resp
     * @return
     * @throws SecurityException 
     * @throws NoSuchFieldException 
     */
    public String edit(HttpServletRequest req,HttpServletResponse resp) throws NoSuchFieldException, SecurityException {
		try {
			this.bookDao.edit(book);
		} catch (IllegalArgumentException | IllegalAccessException | SQLException e) {
			e.printStackTrace();
		}
    	 return "toList";
    }
     
     /**
      * 删除
     * @param req
     * @param resp
     * @return
     * @throws SecurityException 
     * @throws NoSuchFieldException 
     */
    public String del(HttpServletRequest req,HttpServletResponse resp) throws NoSuchFieldException, SecurityException {
 		try {
 			this.bookDao.del(book);
 		} catch (IllegalArgumentException | IllegalAccessException | SQLException e) {
 			e.printStackTrace();
 		}
     	 return "toList";
     }
    
    public Book getModel() {
    	return book;
    }
}

配置mvc.xml

<?xml version="1.0" encoding="UTF-8"?>

<config>
	<!-- <action path="/cal_add" type="com.myy.web.AddCalAction">
		<forward name="rs" path="/rs.jsp" redirect="false" />
	</action>
	<action path="/cal_del" type="com.myy.web.DelCalAction">
		<forward name="rs" path="/rs.jsp" redirect="false" />
	</action> -->
	
	<action path="/cal" type="com.myy.web.CalAction">
		<forward name="rs" path="/rs.jsp" redirect="false" />
	</action>
	
	<action path="/book" type="com.myy.web.BookAction">
		<forward name="list" path="/bookList.jsp" redirect="false" />
		<forward name="edit" path="/bookEdit.jsp" redirect="false" />
		<forward name="toList" path="/book.action?methodName=list"  />
	</action>
	
	
	
</config>

bookList书籍主页面

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="/myy" prefix="m"%>
<!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>书籍主页</title>
</head>
<body>
<h2>小说目录</h2>
	<br>

	<form action="${pageContext.request.contextPath}/book.action?methodName=list"
		method="post">
		<!-- <input type="hidden" name="rows" value="20"> --> 
		
		书名:<input type="text" name="bname">
		 <input type="submit"
			value="确定">
			
	</form>
	<a href="${pageContext.request.contextPath}/book.action?methodName=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?methodName=preSave&&bid=${b.bid}">修改</a>&nbsp;
			<a href="${pageContext.request.contextPath}/book.action?methodName=del&&bid=${b.bid}">删除</a>
				</td>
			</tr>
		</c:forEach>
	</table>


 <m:page pageBean="${pageBean}"></m:page> 
 
</body>
</html>

bookEdit修改增加页面

<%@ 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>书籍的编辑页面</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/book.action?methodName=${book.bid == null ? 'add' : 'edit'}" method="post">
   编号:<input type="text" value="${book.bid}" name="bid"><br>
   书名:<input type="text" value="${book.bname}" name="bname"><br>
   价格:<input type="text" value="${book.price}" name="price"><br>
   <input type="submit" value="确认">
</form>

</body>
</html>

测试运行结果:
显示:
在这里插入图片描述
点击增加:
在这里插入图片描述
点击确定查看是否增加成功:
在这里插入图片描述
点击修改得到数据进行修改:
在这里插入图片描述
修改如下数据:
在这里插入图片描述
查看是否修改成功:
在这里插入图片描述
点击删除返回所有数据,查看是否删除成功:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVC模式的实现对数据库的增删改查 部分代码: package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import common.DBConnection; import bean.Contact; public class ContactDAO { public List getAllContact() throws Exception{ Connection conn=DBConnection.getConntion(); PreparedStatement ps=conn.prepareStatement("select * from Contact"); ResultSet rs=ps.executeQuery(); List list = new ArrayList(); while(rs.next()){ int id = rs.getInt("id"); String name = rs.getString("name"); String phone = rs.getString("phone"); String address = rs.getString("address"); Contact c = new Contact(); c.setId(id); c.setName(name); c.setPhone(phone); c.setAddress(address); list.add(c); } rs.close(); ps.close(); conn.close(); return list; } public void addContact(String name,String phone,String address) throws Exception{ String sql = "insert into contact(id,name,phone,address) values(seq_contact.nextval,?,?,?)"; Connection con = DBConnection.getConntion(); PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, name); pstmt.setString(2, phone); pstmt.setString(3, address); pstmt.executeUpdate(); } public void delContact(int id) throws Exception{ String sql = "delete from contact where id=?"; Connection con = DBConnection.getConntion(); PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setInt(1, id); pstmt.executeUpdate(); } public Contact getContactById(int id) throws Exception{ String sql = "select * from Contact where id=?"; Connection con = DBConnection.getConntion(); PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setInt(1, id); ResultSet rs = pstmt.executeQuery(); Contact c = null; while(rs.next()){ // int id = rs.getInt("id"); String name=rs.getString("name"); String p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值