web(20)商品增删改查&分页

这篇博客介绍了商品管理系统的功能实现,包括物理分页查询、添加商品、模糊查询、删除商品(单个和批量)以及修改商品。在删除操作中应用了DBUtils的事务处理。文章还提到了前端JS如何通过msg信号接收操作成功提示。提供了JSP页面和Servlet代码示例,涉及ProductFindAllServlet、DividePageServlet、AddProductServlet等多个关键组件。
摘要由CSDN通过智能技术生成
     通过这几天学习MVC形式开发web功能,有一个原则可以确定,就是必须先处理后台数据,然后获取处理完的后台数据,到前端显示
 后台的数据结果。
      今天案例出现频率很高的一个获取当前工程路径的代码:${pageContext.request.contextPath}指向了当前的工程路径
名称。比如:localhost:8080/day0610
这个形式的路径避免把绝对路径写死,便于后面的项目迁移。
比如,运用在前端的jQuery引入项目路径,可以写:
<script src='${pageContext.request.contextPath}/js/jquery1.8.3.js'>
</script>
这样子做的话,当以后前端部分的代码要迁移时,在正确迁移的情况下不必修改路径


一.分页查询——物理分页思路:

1.首先点击首页的"分页查询"链接,访问到DividePageServlet,get方式上传当前首页currPage=0的参数。
2.创建一个PageBean 里面的成员属性有:
1)currPage:当前页面
2)pageSize:每页显示多少条记录
3)totalRecordNum:总记录数
4)totalPage:总页数
5)List<Product>:商品数据集合


3.接下来DividePageServlet的工作就是填充PageBean里面的属性。
1)新建一个PageBean对象。
2)由于分页查询的sql语句是使用关键字limit:select * from product limit [begin],[size];
begin:表示从哪一条查起 
size:应该查多少条
3)可以算出:
begin = (currPage-1)*10:第1页 从0条开始;第2页从 从10条开始;第3页,从20条开始...
size = PageSize 可以写死final 10条;
4)上面的两个参数算完以后,  
(1)获取总记录数totalRecordNum:
 调用int count = PageService.getCount();
 PageService调用PageDao.getCount();
 使用sql语句select count(*) from product;
 要使用new ScalarBeanHandler结果集,返回单一查询结果
 
(2)获取List<Product>集合:
调用List<Product> list = PageService.findAll(begin,size);
PageService调用PageDao.findAll(begin,size);
PageDao创建List<Product> findAll(begin,size)方法
方法里使用查询所有的sql语句,使用new BeanListHandler结果集,返回一个List<Product> list;


5)获取总页数totalPage
Math.ceil(totalRecordNum/size);
注意整形转换成Double型,再转回int型


6)至此,已经获取PageBean对象的所有属性。存放到request对象中,然后转发到商品分页页面product_divide.jsp页面




7)前端jsp展示分页的数据效果:
前面步骤已经存储了pageBean在session。接下来在dividePage_list.jsp中获取pageBean就能做了
jsp前端代码:
<p>
分页条: <a href='/day0610/DividePageServelt?currPage=1'>【首页】</a>
<c:if test="${pageBean.currPage!=1}">
  <a href='/day0610/DividePageServelt?currPage=${pageBean.currPage-1}'>[上一页]</a>
</c:if>
<c:forEach begin="1" end="${pageBean.totalPageNum}" var="status">
  <a href='/day0610/DividePageServelt?currPage=${status}'>[${status}]</a>
</c:forEach>
  <c:if test="${pageBean.currPage!=pageBean.totalPageNum}">
     <a href='/day0610/DividePageServelt?currPage=${pageBean.currPage+1}'>[下一页]</a>
  </c:if>
<a href='/day0610/DividePageServelt?currPage=${pageBean.totalPageNum}'>【尾页】</a>
${pageBean.currPage}/${pageBean.totalPageNum}页&nbsp;共${pageBean.totalRecordNum}条记录
</p>


二、商品的添加改查功能:
1.添加商品:
1).新建一个处理添加商品的Servlet:AddProductServlet,新建一个商品添加页面addProduct.jsp。里面加一个商品添加商品种类的表单.
2).表单提交到AddProductServlet后,使用request.getParamterMap()得到一个含有所有参数的map集合
3).这里使用BeanUtils直接封装表单Product对象:BeanUtils.populate(product,map);
4).给封装后的Product对象设置一个32位随机字符串的pid属性,使用Java自带UUIDUtils.因为初始生成含有'-'号,使用replace()方法将"-"替代为"";
5).将对象传入Service->dao:使用update进行更新操作。由于对象有10个属性。可以建立一个参数数组Object[] params存储对象的成员值
6).关于重复提交的本质原因是没有对当前页面进行刷新。这里使用令牌(token)的形式对没有刷新页面的提交进行处理。原理和验证码一次性使用一样
在客户端jsp代码中获得一个UUID形式的token。分别存放在客户端的request请求域对象中,和服务端的session中。当有刷新提交访问到服务端,从服务端获取到这个
token。然后移除该session。只要有访问服务端,request域对象的token和session的token是一样的。当第二次再重复提交。第一次的Session中的token被
移除了。拿到的是null的session。


2.模糊查询查找商品:
 查寻含有关键字的商品名称,在sql操作中,使用like "%a%"模糊查询来查 
1)post方式提交pname到处理模糊查询的FindLikeServlet中。先进行中文编码的处理
2)新建一个ProductBean对象。
3)调用ProductService中的List<Product> list=findLike(pname)功能,Dao也创建该方法
4)在Dao的findLike(pname)中,sql语句是"select * from product order by pdate where pname like ?",
后面的参数是"%"+pname+"%"。返回的结果是BeanList;
5)把DAO返回的List<Product> list传递到Servlet中,赋值给productBean.list;
6)productBean存放到session.覆盖原来的seesion
7)
---------mark一下 明天再补全-----------------
3.删除商品

删除商品分为

1)选择多项商品删除

2)单击单项商品删除链接

删除商品中要使用事务机制,这里采用的是DBUtils中的事务封装的方法

4.修改商品:

修改商品。因为request请求发送的是字符串链接。不能上传一个bean对象。所以我们只能把商品id上传到后台,让后台查找到

数据库的商品。然后利用后台的

----------------完善------------------
1.添加/删除/修改/删除所选等操作,添加一个msg信号。在js接收msg。这样子当操作成功的时候,能够弹出一个alert警告框提示操作成功
因为是一次性信号,所以使用reuqest域对象存储信号:
添加成功:"msg","msgAddSuccess"
修改成功:"msg","msgUpdateSuccess"
删除成功:"msg","msgDeleteSuccess"
查询失败:"msg","msgLikeFindError"

【案例:商品的增删改查与分页】代码

一、JSP页面:

1.显示所有商品:

product_list.jsp

这段代码在CSDN提供的编辑器中,生成了<span style="white-space:pre;"> </span>这个东东,请忽略掉。

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head>
<link rel="stylesheet" type="text/css"
	href="/day0610/demo/css/bootstrap.min.css" />
<script src="/day0610/demo/js/jquery-1.8.3.js"></script>
<script src="/day0610/demo/js/bootstrap.min.js"></script>


<script>
	$(function() {
		//				偶数行表格背景变色
		$("table tbody tr:odd").css("background-color", "#AFD9EE");


	});
</script>
<style>
* {
	margin: 0;
	padding: 0;
}


table {
	width: 100%;
	border-collapse: separate;
	border-spacing: 0px;
	border-color: grey;
	border: 1px solid #aaa;
}


th {
	vertical-align: baseline;
	padding: 5px 15px 5px 6px;
	background-color: #3F3F3F;
	border: 1px solid #3F3F3F;
	text-align: center;
	color: #fff;
}


td {
	border: 1px solid #3F3F3F;
	padding: 5px 15px 5px 6px;
	text-align: center;
}
</style>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
	function addPage() {
		//页面跳转的方法:window.location.href = ${pageContext.request.contextPath}/jsp/demo/product_list.jsp;
		window.location.href = "${pageContext.request.contextPath}/demo/jsp/addProduct.jsp";
		
	}
	
	
</script>
</head>


<body>
	<center>
		<h2>商品详情列表</h2>
		<tr>
			<td colspan=7>商品名称:<input type="text" name="pname"><input
				type="submit" value="查询">&nbsp;&nbsp;&nbsp;&nbsp; <input
				type="button" value="添加" οnclick="addPage()" />
			</td>
		</tr>
		<br />
		<br />
	</center>
	<div class="container">
		<div class="rows">
			<div class="col-lg-12"></div>
		</div>
	</div>
<
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java连接数据库的增删改查可以通过使用JdbcTemplate来实现。首先,你需要配置数据源,确保能够连接到数据库。在配置文件中设置数据库的驱动类、URL、用户名和密码。 接下来,你需要创建数据库和。可以通过运行SQL语句来创建数据库和,例如创建一个名为testdb的数据库并在其中创建一个名为user的。 然后,你可以在数据访问层(DAO)进行增删改查的操作。可以先创建一个接口,定义对数据库的基本增删改查操作,然后创建一个实现类,使用JdbcTemplate来实现这些操作。 如下是一个简单的示例: ```java // 配置数据源 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;allowPublicKeyRetrieval=true spring.datasource.username=root spring.datasource.password=123456 // 创建数据库和 DROP DATABASE IF EXISTS `testdb`; create database testdb; Use testdb; DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `user_id` int NOT NULL AUTO_INCREMENT COMMENT '用户 ID', `user_name` varchar(255) DEFAULT NULL COMMENT '用户名', `status` varchar(255) DEFAULT NULL COMMENT '用户状态', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; // 数据访问层DAO // 接口CRUD public interface UserDao { User getById(int id); List<User> getAll(); void insert(User user); void update(User user); void delete(int id); } // DAO层实现类--JdbcTemplate @Repository public class UserDaoImpl implements UserDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public User getById(int id) { String sql = "SELECT * FROM user WHERE user_id = ?"; return jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class)); } @Override public List<User> getAll() { String sql = "SELECT * FROM user"; return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class)); } @Override public void insert(User user) { String sql = "INSERT INTO user (user_name, status) VALUES (?, ?)"; jdbcTemplate.update(sql, user.getUserName(), user.getStatus()); } @Override public void update(User user) { String sql = "UPDATE user SET user_name = ?, status = ? WHERE user_id = ?"; jdbcTemplate.update(sql, user.getUserName(), user.getStatus(), user.getUserId()); } @Override public void delete(int id) { String sql = "DELETE FROM user WHERE user_id = ?"; jdbcTemplate.update(sql, id); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值