商城项目第五天

商城项目第五天

今日任务:

Redis优化

完成分类信息的增删改查(后台管理员)

Redis优化 (选做)

一定要开启 redis 导入工具类 配置文件

CategoryService
 /**
     * 查询所有的分类信息
     *    使用redis 优化
     *       1:先去redis中查询 分类信息
     *          获取连接对象 查询
     *             get("categories")
     *       2.1:如果 数据不存在
     *          说明是第一次访问,
     *          2.1.1 找到dao--mysql--查询
     *          List<Category> list
     *          有了  但是返回数据之前
     *          2.1.2
     *             将数据存到 redis中
     *              键 categories
     *              值 list--json数据存储
     *
     *       2.2 有了数据
     *          将 数据取出来
     *            但是这个数据 是一个字符串(集合哪种json!)
     *              将这个字符串---转换回来 称为List集合
     *
     *              将集合数据返回
     *
     * @return
     */
    @Override
    public List<Category> findAllCategorys() {
        List<Category> list = null;

        try {
            /*
            1:先去redis中查询 分类信息
             */
            // 连接 redis  获取jedis对象
            Jedis jedis = JedisUtils.getJedis();
            // 去redis中获取 到 categories对应的数据
            String categories = jedis.get("categories");

            if(categories==null){//redis中没数据 第一次来查询
                //第一次查 还得找到 dao
                list=categoryDao.findAllCategorys();

                //将集合list 转换成 json形式  并且变成字符串形式
                String s = JSONArray.fromObject(list).toString();

                // 将数据存到 redis中
                // 键 字符串  值  集合转换成json 形式的字符串
                jedis.set("categories",s);
            }else{
                //redis中有数据
                // categories    是一个json 字符串形式的 (里面的数据是 集合格式)
                // 将这个json字符串形式东西 转换成 以前的list集合

                // 将JSON字符串 转换成 json对象形式!!
                JSONArray jsonArray = JSONArray.fromObject(categories);

                // 转换成list集合
               list = jsonArray.toList(jsonArray, Category.class);
            }

            jedis.close();




        } catch (SQLException e) {

            e.printStackTrace();
        }

        return list;
    }

查询所有分类信息

实现步骤

  • 分类列表页面发送AJAX请求
  • Servlet查询所有分类信息数据
  • JSON数据格式响应客户端
  • 判断奇数偶数行,显示数据

category/list.html

	//页面加载成功之后 发送ajax请求 
			$(function(){
				
				var url = "/admin?method=findAllCategorys";
				
				HM.ajax(url,"",function(data){
					
					if(data.code==0){
						alert(data.message);
					}
					
					if(data.code==1){//成功
						//解析数据 
						// data.data 就是 所有的分类信息 数组
						var  cateArr = data.data;
						
						//展示  要 拿到每个分类信息 
						$.each(cateArr,function(index,c){
							// c 就是每一个分类信息 
							//  tr的class属性 有两个  cate_tr tr_odd   cate_tr tr_even
							
							
							//  c  都有 index     0  2 4 cate_tr tr_odd  1 3 5 cate_tr tr_even
							var  strClass = index%2==0?"cate_tr tr_odd":"cate_tr tr_even"; 
							
							var  str = `<tr class="${strClass}" >
								<td>
									${c.cid}
								</td>
								<td>
									${c.cname}
								</td>
								<td >
									<a href="http://www.itheima342.com:8020/web/view/admin/category/edit.html?cid=${c.cid}" class="a_button_edit"></a>
									&nbsp;&nbsp;
									<a href="javascript:;" "del('${c.cid}')" class="a_button_del"></a>
								</td>
							</tr>`;
							
							$("#cate_list").append(str);
							
						});
					}
					
				})
			})
			

AdminServlet

/*
      查询所有分类信息
    */
   public void findAllCategorys(HttpServletRequest request, HttpServletResponse response)
           throws InvocationTargetException, IllegalAccessException,
                  IOException {
       // 找到 service查询
       List<Category> categorys = categoryService.findAllCategorys();

       if(categorys!=null && categorys.size()>0){//查询到了多个分类信息


           Result result = new Result(Constant.SUCCESS,"管理员查询分类信息成功",categorys);

           //需要把 result变成json格式


           response.getWriter().write(JSONObject.fromObject(result).toString());

           return;

       }

       //响应json格式   这种格式 需要跟前端商量!!!

       // 按照 规则 去进行json的响应
       // Result就是规则
       Result result = new Result(Constant.FAILS,"查询分类信息失败");

       //需要把 result变成json格式


       response.getWriter().write(JSONObject.fromObject(result).toString());

   }

添加新的分类

实现步骤

  • 添加页面发起AJAX请求,提交填写的分类数据
  • Servlet 接收数据,并调用业务层保存数据
  • 业务层调用持久层保存数据,并清空数据库缓存
  • Servlet响应添加成功信息

category/add.html

// 添加功能完成 
	    	function addCategroy(){
	    		
	    		var cname = $("#cname").val();
	    		
	    		if(!cname.trim()){
	    			//如果没写内容
	    			alert("请输入分类名称!!")
	    			return;
	    		}
	    		
	    		
	    		var  url = "/admin?method=addCategory";
	    		var  params = "cname="+cname;
	    		HM.ajax(url,params,function(data){
	    			 
	    			 if(data.code){
	    			 	alert(data.message);
	    			 	location.href="http://www.itheima342.com:8020/web/view/admin/category/list.html";
	    			 }
	    			
	    		})
	    		
	    	}

AdminServlet

/*
      添加分类信息
    */
    public void addCategory(HttpServletRequest request, HttpServletResponse response)
            throws InvocationTargetException, IllegalAccessException,
                   IOException {
        //1:获取cname
        String cname = request.getParameter("cname");

        // 设置cid 封装一个 category对象
        Category category = new Category();

        category.setCid(UUIDUtils.getUUID());
        category.setCname(cname);

        // 交给service
        categoryService.addCategory(category);

        //响应json格式   这种格式 需要跟前端商量!!!

        // 按照 规则 去进行json的响应
        // Result就是规则
        Result result = new Result(Constant.SUCCESS,"添加分类信息成功");

        //需要把 result变成json格式


        response.getWriter().write(JSONObject.fromObject(result).toString());

    }

CategoryService

 /**
     *  添加分类信息
     * @param cname
     */
    public void addCategory(String cname) {
        try {
            dao.addCategory(cname);
            // 增删改 更新了分类信息
            // 让redis清除掉 数据
            clearRedis();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

 /*
      清空缓存
     */
    public void clearRedis(){
        Jedis jedis = JedisUtils.getJedis();

        jedis.del("categories");

        jedis.close();
    }

CategoryDao

  /*
    添加分类信息
     */
    @Override
    public void addCategory(Category category) throws SQLException {
        String sql = "insert into category values(?,?)";
        Object[] params = {category.getCid(),category.getCname()};

        qr.update(sql,params);
    }

修改分类信息回显

实现步骤

  • 分类编辑页面获取分类
  • 发送请求,获取分类名称
  • 分类名称显示在页面中

category/edit.html

//页面加载成功之后 要向服务器发送请求 获取分类信息 并完成展示
	   	   $(function(){
	   	   	
	   	       var cid = HM.getParameter("cid");
	   	       
	   	   	   var  url = "/admin?method=info";
	   	   	   var params = "cid="+cid;
	   	   	   
	   	   	   HM.ajax(url,params,function(data){
	   	   	   	
	   	   	   	   if(data.code==1){//成功 将数据回显
	   	   	   	   	  //得到了 我们需要的 分类信息数据
	   	   	   	   	  var cate = data.data;
	   	   	   	   	
	   	   	   	   	  $("#cname").val(cate.cname);
	   	   	   	   }
	   	   	   	
	   	   	   })
	   	   	
	   	   	
	   	   })

AdminServlet

/*
        查询分类信息
       */
    public void info(HttpServletRequest request, HttpServletResponse response)
            throws InvocationTargetException, IllegalAccessException,
                   IOException {
        //1:获取cid
        String cid = request.getParameter("cid");


        // 交给service
        Category category = categoryService.info(cid);

        //响应json格式   这种格式 需要跟前端商量!!!

        // 按照 规则 去进行json的响应
        // Result就是规则
        Result result = new Result(Constant.SUCCESS,"查询到了分类信息",category);

        //需要把 result变成json格式


        response.getWriter().write(JSONObject.fromObject(result).toString());

    }

CategoryService

 /*
      根据cid查询 分类信息
     */
    @Override
    public Category info(String cid) {
        Category category=null;

        try {
            category= categoryDao.info(cid);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return category;
    }

CategoryDao

 // 根据cid查询分类信息
    @Override
    public Category info(String cid) throws SQLException {
        String sql = "select * from category where cid=?";
        Object[] params = {cid};
        return qr.query(sql, new BeanHandler<>(Category.class), params);
    }

修改商品分类

实现步骤

  • 分类编辑页面发送请求,提交主键和分类名称
  • Servlet接收参数,传递到业务层修改数据
  • 修改完毕后清空redis数据缓存
  • 显示修改完毕后的信息

category/edit.html

 /**
	   	    *   完成 修改操作  事件
	   	    */
	   	   function editCategroy(){
	   	   	  // 要修改的分类的id
	   	      var cid = HM.getParameter("cid");
	   	   	  // 将输入框中内容cname获取 
	   	   	  var cname = $("#cname").val();
	   	   	 
	   	   	 if(!cname.trim()){
	    			//如果没写内容
	    			alert("请输入分类名称!!")
	    			return;
	    		}
	   	   	  
	   	   	   var url = "/admin?method=editCategory";
	   	   	   var params = "cid="+cid+"&cname="+cname;
	   	   	   
	   	   	   
	   	   	   HM.ajax(url,params,function(data){
	   	   	   	    
	   	   	   	    if(data.code==1){
	   	   	   	    	
	   	   	   	    	alert(data.message);
	   	   	   	    	location.href="list.html";
	   	   	   	    }
	   	   	   	
	   	   	   })
	   	   	   
	   	   	   
	   	   }

AdminServlet

/*
         完成 编辑操作 也就是修改操作
      */
    public void editCategory(HttpServletRequest request, HttpServletResponse response)
            throws InvocationTargetException, IllegalAccessException,
                   IOException {
        //1:获取cid
        String cid = request.getParameter("cid");
        String cname = request.getParameter("cname");

        Category category = new Category();
        category.setCid(cid);
        category.setCname(cname);

        // 交给service
       categoryService.editCategory(category);

        //响应json格式   这种格式 需要跟前端商量!!!

        // 按照 规则 去进行json的响应
        // Result就是规则
        Result result = new Result(Constant.SUCCESS,"分类信息修改成功");

        //需要把 result变成json格式


        response.getWriter().write(JSONObject.fromObject(result).toString());

    }

CategoryService

//修改分类信息
    @Override
    public void editCategory(Category category) {

        try {
            categoryDao.editCategory(category);
            // 将redis中数据清空
            clearRedis();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

CategoryDao

 // 修改分类信息  根据cid修改cname
    @Override
    public void editCategory(Category category) throws SQLException {

        String sql = "update category set cname = ? where cid = ?";

        Object[] params = {category.getCname(),category.getCid()};

        qr.update(sql,params);
    }

删除商品分类

实现步骤:

  • 提示用户是否确认删除
  • 发送AJAX请求,提交分类主键
  • 删除该商品分类,并清空redis数据库缓存
  • 如果该分类下有商品,则不能删除

category/edit.html

 /**
			  *  删除事件 
			  */
			 function del(cid){
			 	if(confirm("您确认要删除该分类信息吗?")){
			 		// 确认  执行删除操作
			 		// 向服务器发送请求 根据cid删除该条记录 
			 		var url = "/admin?method=deleteCategory";
			 		var params = "cid="+cid;
			 		
			 		HM.ajax(url,params,function(data){
			 			if(data.code==1){
			 				//删除成功
			 				alert(data.message);
			 				location.reload();
			 			}
			 			
			 			if(data.code==0){
			 				//删除失败
			 				alert(data.message);
			 				location.reload();
			 			}
			 		})
			 	}
			 }
			 

AdminServlet

  /*
         完成 根据cid删除分类信息
      */
    public void deleteByCid(HttpServletRequest request, HttpServletResponse response)
            throws InvocationTargetException, IllegalAccessException,
                   IOException {
        //1:获取cid
        String cid = request.getParameter("cid");


        // 交给service
        try {
            //如果没问题 不会走 catch!!
            categoryService.deleteByCid(cid);

        } catch (CanNotDeleteException e) {
            // 如果有问题 就会走catch
            //给有问题的响应
            Result result = new Result(Constant.FAILS,e.getMessage());

            //需要把 result变成json格式
            response.getWriter().write(JSONObject.fromObject(result).toString());
            return;
        }

        //响应json格式   这种格式 需要跟前端商量!!!

        // 按照 规则 去进行json的响应
        // Result就是规则
        Result result = new Result(Constant.SUCCESS,"删除分类信息成功");

        //需要把 result变成json格式


        response.getWriter().write(JSONObject.fromObject(result).toString());

    }

CategoryService

 // 根据cid删除数据
    @Override
    public void deleteByCid(String cid) throws CanNotDeleteException{

        try {
           // 删除之前 先根据cid查询一下 该分类下 是否还有关联的商品信息!!
            long total = productDao.findTotalByCid(cid);

            if(total>0){//有数据
                // 分类信息下有数据 你还去删除  你说你是不是 做错了!!
                //做了错事 就是错误  或者叫做异常
                // java中用来表示问题 的 一个机制 就叫异常机制!!
                // 做错事了 那么就要 报出来 抛出来!!

               // throw  new Exception("该分类信息有关联数据,不能删除!!");
               // Exception  不要用老大!!
                // 应该具体一点  自己定义一个不能删除的异常!!
             // 将 不能删除的异常 抛出来
                throw  new CanNotDeleteException("该分类信息有关联数据,不能删除!!");


            }else{//没有数据
                categoryDao.deleteByCid(cid);
                // 将redis中数据清空
                clearRedis();
            }


        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

CategoryDao

   // 根据cid删除 分类信息
    @Override
    public void deleteByCid(String cid) throws SQLException {
        String sql = "delete from category where cid = ?";
        Object[] params = {cid};

        qr.update(sql,params);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_35670694

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值