删除分类(一对多的删除)
1)步骤分析
- 在list.jsp上编写,添加删除连接:/store/adminCategory/delete/cid=?
- 在delete方法中
- 获取cid
- 调用Service执行删除delete
- 页面重定向到findAll
- service中delete(分类和商品表是一对多的关系)
- 添加事务
- 通过cid先更新所有的商品分类信息
- 调用dao删除分类
- 事务控制
- 清空缓存
2)代码实现
① 在jsp上给删除添加点击事件
<a href="javascript:void(0);" onclick="deleteC('${c.cid}');">
<img src="${pageContext.request.contextPath}/images/i_del.gif" width="16" height="16" border="0" style="CURSOR: hand">
</a>
js:
<script type="text/javascript">
function deleteC(cid){
if(confirm("您确定要删除此分类吗?")){
location.href="${pageContext.request.contextPath}/adminCategory/delete?cid="+cid;
}
}
</script>
② 在AdminCategoryServlet中处理delete
private void delete(HttpServletRequest request, HttpServletResponse response) throws Exception{
//1、获取cid
String cid=request.getParameter("cid");
//2、调用service完成删除
categoryService.delete(cid);
//3、重定向
response.sendRedirect(request.getContextPath()+"/adminCategory/findAll");
}
③ 完成service层
@Override
public void delete(String cid) throws Exception{
try {
//1、开启事务
DBUtil.startTransaction();
//2、更新商品
productDao.updateCid(cid);
//3、删除分类
categoryDao.delete(cid);
//4、事务控制
DBUtil.commitAndClose();
//5、清空缓存
//2.1 创建缓存管理器
CacheManager cm=CacheManager.create(CategoryServiceImpl.class.getClassLoader().getResourceAsStream("ehcache.xml"));
//2.2 获取指定的缓存
Cache cache=cm.getCache("categoryCache");
//2.3 清空缓存
cache.remove("clist");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
DBUtil.rollbackAndClose();
throw new MyException();
}
}
④ 完成dao层
ProductDaoImpl:
@Override
public void updateCid(String cid) throws Exception {
QueryRunner qr1=new QueryRunner();
String sql="update product set cid=null where cid=?";
qr1.update(DBUtil.getConnection(),sql,cid);
}
CategoryDaoImpl:
@Override
public void delete(String cid) throws Exception {
QueryRunner qr1=new QueryRunner();
String sql="delete from category where cid=?";
qr.update(DBUtil.getConnection(),sql,cid);
}
测试即可