电商学习笔记

MyBatis分页与类别查询

使用PageHelper插件分页

 public ServerResponse<PageInfo> getGoodsList(int pageNum, int pageSize){
        //startPage--start,开始初始化,注意是使用pagehelper.startpage属性的填入起始页和每页的数量
        PageHelper.startPage(pageNum,pageSize);
        //填充自己的sql查询逻辑,即查询所有数据
        List<Goods> goodsList = goodsMapper.selectList();
        //遍历goodsList,使其转为VO的list,VOlist的含义是根据goodlist里的元素和自己定义的元素集成封装的一个value object
        List<GoodsListVo> goodsListVoList = Lists.newArrayList();
        for(Goods goodsItem : goodsList){
            GoodsListVo goodsListVo = assembleGoodsListVo(goodsItem);
            goodsListVoList.add(goodsListVo);
        }
        //pageHelper-收尾
        PageInfo pageResult = new PageInfo(goodsList);//收尾使用pageinfo实例化一个pageresult对象
        pageResult.setList(goodsListVoList);//注意,还有一步使用的是pageresult设置list集合,且对象为封装好的VOlist,而不是goodlist
        return ServerResponse.createBySuccess(pageResult);
    }

递归获取商品结点及子元素节点

 //查询同层次结点ID      即输入一个父节点(默认商品分类的根父节点为“0”)  则查找父节点为0的所有节点,称为同层次结点
    public ServerResponse<List<Category>> selectParalleCategory(Integer parentId){
        if(parentId==null){
            return  ServerResponse.createByErrorMessage("品类参数错误");
        }
        List<Category> categoyList=categoryMapper.selectParalleCategoryByParentId(parentId);
        if(CollectionUtils.isEmpty(categoyList)){
            logger.info("未找到当前分类的子分类");
        }
        return ServerResponse.createBySuccess(categoyList);

    }

    //查询本节点ID及孩子结点ID
    public ServerResponse selectCategoryAndChildren(Integer categoryId){
        Set<Category> categorySet= Sets.newHashSet();//初始化set,作用是加入查询结点结合并根据查询结点查询子节点,根据子节点循环遍历递归查询子节点的子节点(如果有的话)
        findChildCategory(categorySet,categoryId);//将
        List<Integer> categoryIdList= Lists.newArrayList();//
        if(categoryId!=null){
            for(Category categoryItem:categorySet){
                categoryIdList.add(categoryItem.getId());
            }
        }
        return ServerResponse.createBySuccess(categoryIdList);
    }
    //递归查找子节点   
    private  Set<Category> findChildCategory(Set<Category> categorySet,Integer categoryId){
        Category category=categoryMapper.selectByPrimaryKey(categoryId);

        if(category!=null){//递归的判断条件
            categorySet.add(category);
        }
        List<Category> categoryList=categoryMapper.selectParalleCategoryByParentId(categoryId);
        for(Category categoryItem:categoryList){
            findChildCategory(categorySet,categoryItem.getId());
        }
        return categorySet;//出口
    }

mybaits查询技巧

/*当要查询或者操作的元素是大量的或者在集合时,用到foreach*/
<delete id="deleteByUserIdGoodsIds" parameterType="map">
    delete from cart
    where uid = #{userId}
    <if test="goodsIdList != null">
      and goods_id in
      <foreach collection="goodsIdList" item="item" index="index" open="(" separator="," close=")">
        #{item}
      </foreach> 
    </if>
  </delete>
/**/
<select id="selectLogin" parameterType="map" resultType="com.xiaoyitao.entity.User">
    SELECT <include refid="Base_Column_List" />
    FROM user
    WHERE uid=#{uid} and password=#{password}
  </select>
//当遇到一种情况,如果查询条件有一方为空,或者两者都为空,则会变成只有selt 。。。 form goods where 空。。。此时程序会报错。为了解决这个问题,使用<where></where>标签,自动判断,如果两者都为空,则不加入where,且会判断是否加入and 标签 而且使用include标签选择属性list数组可以避免冗长的代码
<select id="selectByNameAndGoodsId" resultMap="BaseResultMap" parameterType="map">
    SELECT
    <include refid="Base_Column_List" />
    FROM goods
    <where>
      <if test="goodsName != null">
        goods_name like #{goodsName}
      </if>
      <if test="goodsId != null">
        and id = #{goodsId}
      </if>
    </where>
  </select>
/*通过assemblegoodslistvo组装goodslist的vo对象,vo里有goodlistd的基本属性,再扩展了很多其他属性*/
    public ServerResponse<PageInfo> getGoodsList(int pageNum, int pageSize){
        //startPage--start
        PageHelper.startPage(pageNum,pageSize);
        //填充自己的sql查询逻辑
        List<Goods> goodsList = goodsMapper.selectList();
        //遍历goodsList,使其转为VO的list
        List<GoodsListVo> goodsListVoList = Lists.newArrayList();
        for(Goods goodsItem : goodsList){
            GoodsListVo goodsListVo = assembleGoodsListVo(goodsItem);
            goodsListVoList.add(goodsListVo);
        }
        //pageHelper-收尾
        PageInfo pageResult = new PageInfo(goodsList);
        pageResult.setList(goodsListVoList);
        return ServerResponse.createBySuccess(pageResult);
    }

    //pojo -> VO 的组装方法
    private GoodsListVo assembleGoodsListVo(Goods goods){
        GoodsListVo goodsListVo = new GoodsListVo();
        goodsListVo.setId(goods.getId());
        goodsListVo.setGoodsName(goods.getGoodsName());
        goodsListVo.setStatus(goods.getStatus());
        goodsListVo.setPrice(goods.getPrice());
        goodsListVo.setCategory(goods.getCategory());
        goodsListVo.setGoodsAddress(goods.getGoodsAddress());
        goodsListVo.setUid(goods.getUid());
        goodsListVo.setAmount(goods.getAmount());
        goodsListVo.setMainImage(goods.getMainImage());

        goodsListVo.setImageHost(PropertiesUtil.getProperty("ftp.server.http.prefix","http://img.happymmall.com/"));

        return goodsListVo;
    }

controller控制器的写法

@Controller  //在控制器类上添加controller注解
@RequestMapping("/manage/category")//添加request请求路径

  @Autowired//使用MVC模式,添加service注解
    private IUserService iUserService;

  @Autowired
    private ICategoryService iCategoryService;
//首先添加requestmapping 里面添加value和method,添加responsebody注解
@RequestMapping(value="upload.do",method = RequestMethod.POST)
    @ResponseBody
    public ServerResponse upload(HttpSession session, @RequestParam(value = "upload_file",required = false) MultipartFile file, HttpServletRequest request){
        //检查文件大小
        if (file.getSize() <= 0) {
            return ServerResponse.createByErrorCodeMessage(ResponseCode.ERROR.getCode(),"上传失败:文件为空");
        }
        //验证用户登录模块
        User user = (User)session.getAttribute(Const.CURRENT_USER);
        if(user == null){
            return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"用户未登录,请登录管理员");
        }
        //检查是否拥有管理员权限
        if(iUserService.checkAdminRole(user).isSuccess()){
            //填充商品业务逻辑
            //获取路径,webapp下的upload文件夹
            String path = request.getSession().getServletContext().getRealPath("upload");
            //上传文件到ftp,返回保存在ftp里的随机文件名
            String targetFileName = iFileService.goodsImgUpload(file,path,user.getUid());
            if(StringUtils.isBlank(targetFileName)){
                return ServerResponse.createByErrorCodeMessage(ResponseCode.ERROR.getCode(),"上传文件异常或不支持的图片文件格式");
            }
            //从xiaoyitao.properties配置文件中读取url
            //url+文件名就得到了一个保存在图片服务器上的图片完整url地址
            String url = PropertiesUtil.getProperty("ftp.server.http.prefix")+targetFileName;

            Map fileMap = Maps.newHashMap();
            fileMap.put("uri",targetFileName);
            fileMap.put("url",url);
            //返回一个文件在ftp上的url
            return ServerResponse.createBySuccess(fileMap);
        }else{
            return ServerResponse.createByErrorMessage("无权限操作");
        }
    }
自考“电子商务案例分析”笔记   第一章 概述   一、案例分析的重要性   1.电子商务的概念、特点   概念:交易当事人或参与人利用计算机技术和网络技术等现代信息技术所进行的各类商务活动,它包括货物贸易、服务贸易和知识产权贸易等。   特点:虚拟性、低成本性、个性化、敏捷性、全球性   2.案例分析的重要性   电子商务蓬勃发展,喜忧参半。   理论研究滞后于电子商务的实际发展,总结成功或失败的经验教训有助于将来电子商务的发展。   从教学的角度,三个方面:深化巩固以前的学习;有助于实践联系理论;逼真的模拟环境训练,有助于教学相长。   二、案例的分类(按专业分)   1.网站建设与维护:电子商务网站硬件建设核心   2.网站内容设计:电子商务网站软件建设核心   3.B2C   4.B2B   5.服务案例   6.EDI案例:EDI主要应用于国际贸易与政府采购,用于企业与企业、企业与批发商、批发商与零售商之间的批发业务。   三、案例分析的主要内容   1.网站背景资料:经营团队、经营策略、投资方、合作伙伴、有无上市计划等。   2.网站建设与维护方法分析:网络平台技术分析、网站安全技术分析、网站维护方法分析。   3.网站经营特色分析:内容设计、营销方法、支付方式、物流配送方式。   4.网站效益分析:盈亏状况、经营风险、竞争优势与劣势、网站发展前景。   四、案例分析的常用方法   综合分析、比较分析、统计分析   五、相关案例   8848、亚马逊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值