IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> MVC框架应用(通用增删改查) -> 正文阅读

[开发测试]MVC框架应用(通用增删改查)

本期内容

?一、导入jar包

1、如何导出自己写出的MVC框架形成jar包?

①、在文件右键以下,找到Export...

?②、点击JAR file

③、寻找存放地点(名字.jar),然后点击next,直到finish

?2、就可以利用我们自己写的jar包了,导入我们需要写的文件里

二、web.xml做配置

<?xml version="1.0" encoding="UTF-8"?>
<config>
?? ?<!--?
?? ??? ?在这里每加一个配置,就相当于actions.put("/goods", new GoodsAction());
?? ??? ?这样就解决了代码灵活性的问题
?? ? -->
?? ?<action path="/book" type="com.lv.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>

三、正式开发

实体类:Book:

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

Dao方法:

package com.lv.dao;

import java.util.List;

import com.lv.entity.Book;
import com.lv.util.BaseDao;
import com.lv.util.PageBean;
import com.lv.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);
?? ?} ??
}

子控制器BookAction:

类需要extends ActionSupport implements ModelDriver<Book>

package com.lv.web;

import java.util.List;

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

import com.lv.dao.BookDao;
import com.lv.entity.Book;
import com.lv.framework.ActionSupport;
import com.lv.framework.ModelDriver;
import com.lv.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";
	}
	
}

主界面:

<%@ 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>

呈现效果:

?

?增加与修改是同一个界面:

<%@ 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>

</head>
<body>
?? ?<form class="form-inline"
?? ??? ?action="${pageContext.request.contextPath }/book.action?methodName=${empty b ? 'add' : 'edit'}" method="post">
?? ??? ?书籍ID:<input type="text" name="bid" value="${b.bid }"><br>
?? ??? ?书籍名称:<input type="text" name="bname" value="${b.bname }"><br>
?? ??? ?书籍价格:<input type="text" name="price" value="${b.price }"><br>
?? ??? ?<input type="submit">
?? ?</form>

</body>
</html>

?增加效果界面:

?修改界面呈现数据:

?本期内容结束~

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:40:46  更:2021-09-02 11:41:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/15 5:18:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码