自定义MVC增删改查

本文介绍了SpringMVC的基本使用,包括XML配置、BaseDao父类、BookDao实现、BookAction控制器以及主界面展示。通过一个简单的书籍管理例子,展示了如何进行数据库操作(增删改查)并实现分页显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思维导图

1、导入jar包

2、xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <action path="/book" type="com.xly.web.BookAction">
        <forward name="list" path="/bookList.jsp" redirect="false" />
        <forward name="toList" path="/book.action?methodName=list" redirect="true" />
        <forward name="toEdit" path="/bookEdit.jsp" redirect="false" />
    </action>
        </config>
 

3、父类dao包 

public class BaseDao<T> {
/**
 * 通用的增删改方法
 *     思路:
 *         1、从传进来的t中读取属性值
 *         2、往预定义对象中设置了值
 * @param sql
 * @param t
 * @throws Exception
 */
    public void executeUpdate(String sql,T t,String[] attrs) throws Exception {
//        String[] attrs=new String[] {"bid","bname","price"};
        Connection con=DBAccess.getConnection();
        PreparedStatement ps=con.prepareStatement(sql);
        for (int i = 0; i < attrs.length; i++) {
            Field f = t.getClass().getDeclaredField(attrs[i]);
//            打开访问权限
//            t-->book,f-->bid
            f.setAccessible(true);
            ps.setObject(i+1, f.get(t));
        }
        ps.executeUpdate();
    }
    
    }

4、Dao方法:

package com.xly.dao;

import java.util.List;

import com.xly.entity.Book;
import com.xly.util.BaseDao;
import com.xly.util.PageBean;
import com.xly.util.StringUtils;

public class BookDao extends BaseDao<Book>{
    /**
     * 增删改查的通用套路
     * 1、建立连接
     * 2、预定义对象PreparedStatement
     * 3、设置占位符
     * 4、ps.executeUpdate()
     * @throws Exception 
     */
//            增加
    public void add(Book book) throws Exception {
        String sql="insert into t_mvc_book values(?,?,?)";
        super.executeUpdate(sql, book, new String[] {"bid","bname","price"});
    }
//            修改
    public void edit(Book book) throws Exception {
        String sql="update t_mvc_book set bname= ?,price= ? where bid= ?";
        super.executeUpdate(sql, book, new String[] {"bname","price","bid"});
    }
//            删除
    public void delete(Book book) throws Exception {
        String sql="delete from t_mvc_book where bid=?";
        super.executeUpdate(sql, book, new String[] {"bid"});
    }
//            查看
    public List<Book> list(Book book,PageBean pageBean) throws Exception {
        String sql="select * from t_mvc_book where 1=1";
        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);
    }   
}

5、BookAction:

package com.xly.web;
 
import java.util.List;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.xly.dao.BookDao;
import com.xly.entity.Book;
import com.xly.framework.ActionSupport;
import com.xly.framework.ModelDriver;
import com.xly.util.PageBean;
 
 
public class BookAction extends ActionSupport implements ModelDriver<Book>{
	private Book book=new Book();
	private BookDao bd=new BookDao();
 
	@Override
	public Book getModel() {
		// TODO Auto-generated method stub
		return book;
	}
//	增删改最终都要跳回查询页面
	/**
	 * 分析增删改查一共有多少结果集的配置
	 * 查询:BookList.jsp 返回值:list
	 * 增删改确定:book.action?methodName=list 返回值:toList
	 * 增删改跳转对应界面:bookEdit.jsp  返回值:toEdit
	 * @param req
	 * @param resp
	 * @return
	 */
	public String add(HttpServletRequest req, HttpServletResponse resp) {
		try {
			bd.add(book);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "toList";
	}
	
	public String list(HttpServletRequest req, HttpServletResponse resp) {
		try {
			PageBean pageBean=new PageBean();
			pageBean.setRequest(req);
			List<Book> list = bd.list(book, pageBean);
			req.setAttribute("books", list);
			req.setAttribute("pageBean", pageBean);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "list";
	}
	
	public String delete(HttpServletRequest req, HttpServletResponse resp) {
		try {
			bd.delete(book);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "toList";
	}
	
	public String edit(HttpServletRequest req, HttpServletResponse resp) {
		try {
			bd.edit(book);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "toList";
	}
//	跳转到新增修改页面
	public String toEdit(HttpServletRequest req, HttpServletResponse resp) {
		try {
//			如果是跳转修改页面,那么需要做bid条件的精准查询
			if(book.getBid()!=0) {
				List<Book> list=bd.list(book, null);
				req.setAttribute("b", list.get(0));
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "toEdit";
	}
	
}

6、主界面:

<%@ page language='java' contentType='text/html; charset=UTF-8'
    pageEncoding='UTF-8'%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%@ taglib prefix="z" uri="http://jsp.veryedu.cn"%>
<!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'>
<link
    href='https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css'
    rel='stylesheet'>
<script
    src='https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js'></script>
<title>书籍列表</title>
<style type='text/css'>
.page-item input {
    padding: 0;
    width: 40px;
    height: 100%;
    text-align: center;
    margin: 0 6px;
}

.page-item input, .page-item b {
    line-height: 38px;
    float: left;
    font-weight: 400;
}

.page-item.go-input {
    margin: 0 10px;
}
</style>
</head>
<body>
    <form class="form-inline"
        action="${pageContext.request.contextPath }/book.action?methodName=list" method='post'>
        <div class='form-group mb-2'>
            <input type='text' class='form-control-plaintext' name='bname'
                placeholder='请输入书籍名称'>
                <!-- 不分页 -->
            <!--     <input name="rows" value="false" type="hidden"> -->
        </div>
        <button type='submit' class='btn btn-primary mb-2'>查询</button>
        <a  class='btn btn-primary mb-2' href="${pageContext.request.contextPath }/book.action?methodName=toEdit">>新增</a>
    </form>

    <table class='table table-striped bg-success'>
        <thead>
            <tr>
                <th scope='col'>书籍ID</th>
                <th scope='col'>书籍名</th>
                <th scope='col'>价格</th>
                <th scope='col'>操作</th>
            </tr>
        </thead>
        <tbody>
        <c:forEach var="b" items="${books }">
        <tr>
                <td>${b.bid }</td>
                <td>${b.bname }</td>
                <td>${b.price }</td>
                <td>
                <a href="${pageContext.request.contextPath }/book.action?methodName=toEdit&bid=${b.bid}">>修改</a>
                <a href="${pageContext.request.contextPath }/book.action?methodName=delete&bid=${b.bid}">>删除</a>

                
                </td>
            </tr>
        </c:forEach>
            

        </tbody>
    </table>
    <!-- 这一行就相当于前面分页需求前端的几十行了 -->
    <z:page pageBean="${pageBean }"></z:page>
    
</body>
</html>

7、效果展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值