客户信息管理系统5—客户信息的删除(一)
3、功能三:客户信息的删除:
(1)单个删除:
1.1单个删除流程
流程:
1.2单个删除实现代码
1.2.1单个删除分析
点击单个删除时, 需要将 客户的 id 带过去
在显示客户信息的页面, 添加删除的链接 .
1.2.2代码组成
findAllCustomer.jsp+DeleteOneServlet + CustomersService + CustomersDao + CustomersDaoImplement
1.2.3代码功能介绍
【1】findAllCustomer.jsp:查询结果显示页面,删除客户信息的入口
【2】DeleteOneServlet:删除单个客户信息web层
【3】CustomersService :业务层(deleteOne(id)方法)
【4】CustomersDao:dao接口层(deleteOne(id)方法)
【5】CustomersDaoImplement:dao结构层实现类(deleteOne(id)方法)
1.2.4代码详细
1.2.4.1 findAllCustomer.jsp:查询结果显示页面,删除客户信息的入口
详细看功能二代码实现,已经写好了
1.2.4.2 DeleteOneServlet:删除单个客户信息web层
package com.zhku.jsj144.zk.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhku.jsj144.zk.service.CustomersService;
public class DeleteOneServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String id=req.getParameter("id");//要删除记录的id
//删除一条记录【单个客户信息】
CustomersService customerService=new CustomersService();//业务层对象
customerService.deleteOne(id);
//重新查询记录
req.getRequestDispatcher("/FindAllServlet").forward(req, resp);//返回删除一条记录后的查询结果情况
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
}
1.2.4.3 CustomersService :业务层(deleteOne(id)方法)
详细看功能一代码实现,已经写好了
1.2.4.4 CustomersDao:dao接口层(deleteOne(id)方法)
详细看功能一代码实现,已经写好了
1.2.4.5 CustomersDaoImplement:dao结构层实现类(deleteOne(id)方法)
详细看功能一代码实现,已经写好了
1.2.5 javascript:void(0)学习
javascript:void(0):作用取消href的默认点击
学习博文:a标签中关于javascript:void(0)的几个问题
网址:http://www.cnblogs.com/andydao/p/3470756.html
1.2.6 添加checkbox是否全部选中(全选,全部选,部分选)【利用javascript实现】
选中状态<input type="checkbox"name="choose" id="chooseFirst"οnclick="checkAll()"></td>
//全选或者全不选
function checkAll(){
//id="chooseFirst" 如果选中,下面的checkbox全部被选中
var chooseAll=document.getElementsByName("choose");//全部choose
var choose=document.getElementById("chooseFirst");//第一个choose
//选中状态:checked可以为true或者false
if(choose.checked){
for(var i=0;i<chooseAll.length;i++){
chooseAll[i].checked=true;
}
}
//id="chooseFirst" 如果没有选中,下面的checkbox全部不选中
else{
for(var i=0;i<chooseAll.length;i++){
chooseAll[i].checked=false;
}
}
}
1.2.7删除提示框【利用javascript实现】
标签:
<a href="javascript:void(0)" οnclick="confirm_deleteOne('${customer.id}')">删除</a>
javascript代码:
//删除确认对话框
function confirm_deleteOne(id) {
// alert(id);
var message=confirm("你确定要删除这条记录吗?");
if(message==true){
// window.location("/customer_system/DeleteOneServlet?id="+id);//错误【使用错误,是等号=,不是括号()】
// window.location="/customer_system/DeleteOneServlet?id="+id;//正确
// document.location.herf="/customer_system/DeleteOneServlet?id="+id;//错误[拼写错误]
window.location.href="/customer_system/DeleteOneServlet?id="+id;//正确
// document.location.href="/customer_system/DeleteOneServlet?id="+id;//正确
// document.location="/customer_system/DeleteOneServlet?id="+id;//正确
}
}
(2)批量删除:
2.2.1批量删除分析
点击单个删除时, 需要将 客户的 id 带过去
在显示客户信息的页面, 添加删除的链接 .
2.2.2代码组成
findAllCustomer.jsp+DeleteAllServlet + CustomersService + CustomersDao + CustomersDaoImplement
2.2.3代码功能介绍
【1】findAllCustomer.jsp:查询结果显示页面,批量删除客户信息的入口
【2】DeleteAllServlet:批量客户信息web层
【3】CustomersService :业务层(deleteAll(choose)方法)
【4】CustomersDao:dao接口层(deleteAll(choose)方法)
【5】CustomersDaoImplement:dao结构层实现类(deleteAll(choose)方法)
2.2.4代码详细
2.2.4.1 findAllCustomer.jsp:查询结果显示页面,批量删除客户信息的入口
详细看功能二代码实现,已经写好了
2.2.4.2 DeleteAllServlet:批量客户信息web层
package com.zhku.jsj144.zk.web;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zhku.jsj144.zk.service.CustomersService;
public class DeleteAllServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//删除多条记录【批量删除】--考虑事务处理机制
//获取批量删除的id号
String choose[]=request.getParameterValues("choose");//选择的choose数量
//进行批量删除
CustomersService customersService=new CustomersService();
customersService.deleteAll(choose);//批量删除
//重新查询记录
request.getRequestDispatcher("/FindAllServlet").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
2.2.4.3 CustomersService :业务层(deleteAll(choose)方法)
详细看功能一代码实现,已经写好了
2.2.4.4 CustomersDao:dao接口层(deleteAll(choose)方法)
详细看功能一代码实现,已经写好了
2.2.4.5 CustomersDaoImplement:dao结构层实现类(deleteAll(choose)方法)
详细看功能一代码实现,已经写好了
(3)批量删除的问题与分析
问题:耦合问题出现!Connection对象应该出现待在dao层,而不应该出现在service层,这样导致service层和到层耦合了
思考:如何进行解耦呢?【解耦合】
这样Service层就不会使用dao层才会使用的Connection对象了。
分析:ThreadLocal类[线程本地类]的使用,可以解决这个问题
(4)本地线程类:ThreadLocal类
1、ThreadLocal类介绍
线程本地类
内部是维护了一个map集合,
如果调用 set(Object )方法, 就是将 这个object 存到这个map 中, key 就是 当前的线程, 使用threadLocal存数据时,实际上是存到 了map中, 但是存到这个map 中, key 永远都是 运行当前的代码的线程,
同样当调用get方法时, 也是以 当前的代码运行所在的线程为 key, 去 map 中 获得值 ,map.get(线程id号 )
2、ThreadLocal理解关键
关键:
ThreadLocal是如何做到为每一个线程维护变量的副本的呢?
其实实现的思路很简单:
在ThreadLocal类中定义了一个ThreadLocalMap,每一个Thread中都有一个该类型的变量——threadLocals——用于存储每一个线程的变量副本,
Map中元素的键为线程对象,而值对应线程的变量副本。
3、ThreadLocal参考文章
【1】参考一
网址:http://www.cnblogs.com/dreamroute/p/5034726.html
【2】参考二
网址:http://www.cnblogs.com/taiwan/p/7533569.html
项目详细代码资源:
本人的github项目地址
https://github.com/Forever99/customer_system