热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

商品管理模块开发

1.修改和新增商品操作publicServerResponsesaveOrUpdateProduct(Productproduct){if(product!null){

1.修改和新增商品操作

public ServerResponse saveOrUpdateProduct(Product product){
        if(product!=null){
            ``` 
            if(StringUtils.isNotBlank(product.getSubImages())) {
                String[] subImageArray = product.getSubImages().split(",");
                if (subImageArray.length > 0) {
                    product.setMainImage(subImageArray[0]);
                }
            ```
            if(product.getId()!=null){
                int resultCount = productMapper.updateByPrimaryKey(product);
                if(resultCount>0){
                    return ServerResponse.createBySuccessMessage("更新商品成功");
                }else{
                    return ServerResponse.createByErrorMessage("更新商品失败");
                }
            }else{
                int resultCount = productMapper.insertSelective(product);
                if(resultCount>0){
                    return ServerResponse.createBySuccessMessage("新增商品成功");
                }else{
                    return ServerResponse.createByErrorMessage("新增更新商品失败");
                }
            }
        }
        return ServerResponse.createByErrorMessage("新增或更新产品参数不正确");
    }

2.产品详情页管理
配置内容都是用properties文件统一编写,便于前后端分离,以及后期的维护,同时这样也更方便于进行热部署。

    public ServerResponse manageProductDetail(Integer productId){
        if(productId==null){
            return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
        }
        Product product=productMapper.selectByPrimaryKey(productId);
        if(product==null){
            return ServerResponse.createByErrorMessage("产品已经下架或删除");
        }
        ProductDetailVo productDetailVo=assembleProductDetailVo(product);
        return ServerResponse.createBySuccess(productDetailVo);
    }

    private ProductDetailVo assembleProductDetailVo(Product product){
        ProductDetailVo productDetailVo=new ProductDetailVo();
        productDetailVo.setId(product.getId());
        productDetailVo.setSubtitle(product.getSubtitle());
        productDetailVo.setPrice(product.getPrice());
        productDetailVo.setMainImage(product.getMainImage());
        productDetailVo.setSubImage(product.getSubImages());
        productDetailVo.setCategoryId(product.getCategoryId());
        productDetailVo.setDetail(product.getDetail());
        productDetailVo.setName(product.getName());
        productDetailVo.setStatus(product.getStatus());
        productDetailVo.setStock(product.getStock());

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

        //ImageHost
        Category category = categoryMapper.selectByPrimaryKey(product.getCategoryId());
        if(category==null){
            productDetailVo.setParentCategoryId(0);//默认根节点 根节点内容为空
        }else{
            productDetailVo.setParentCategoryId(category.getParentId());
        }

        //createTime
        productDetailVo.setCreateTime(DateTimeUtil.dateToStr(product.getCreateTime()));
        productDetailVo.setUpdateTime(DateTimeUtil.dateToStr(product.getUpdateTime()));
        return productDetailVo;
    }

3.商品列表动态功能开发

这里需要使用分页工具pageHelper,每页显示数量,以及页码。

  <select id="selectList" resultMap="BaseResultMap">
    select
    "Base_Column_List"/>
    from mmall_product
    ORDER BY id ASC   
#通常在后面见加上分号,但是切面时会加上limit关键字分页,就会报错
  select>

这里使用vo来存储所需要显示的部分,对于库存,子图等不予展示
POJO、VO、BO的关系

public ServerResponse getProductList(int pageNum,int pageSize){
        PageHelper.startPage(pageNum,pageSize);
        List  product_list=productMapper.selectList();

        List productVoList = Lists.newArrayList();
        for(Product product:product_list) {
            ProductListVo productDetailVo = assembleProductListVo(product);
            productVoList.add(productDetailVo);
        }
        PageInfo pageResult=new PageInfo(product_list);
        pageResult.setList(productVoList);
        return ServerResponse.createBySuccess(pageResult);
    }

    //装配成为指定值对象
    public ProductListVo assembleProductListVo(Product product){
        ProductListVo productListVo=new ProductListVo();
        productListVo.setName(product.getName());
        productListVo.setId(product.getId());
        productListVo.setCategoryId(product.getCategoryId());
                    productListVo.setImageHost(PropertiesUtil.getProperty("ftp.server.http.prefix","http://img.happymmall.com/"));
        productListVo.setMainImage(product.getMainImage());
        productListVo.setPrice(product.getPrice());
        productListVo.setSubtitle(product.getSubtitle());
        productListVo.setStatus(product.getStatus());

        return productListVo;
    }

4.商品搜索功能
根据商品名和id来搜索,或者其中之一,mybatis编写sql语句时注意,where和if条件的使用方法,where可以代替诸如:where 1=1之类的硬编码,智能的替换AND关键字,保证sql语句的正确执行,更美观,扩展性更好。

<select id="selectByNameAndProductId" resultMap="BaseResultMap" parameterType="map">
    SELECT
    "Base_Column_List"/>
    FROM mmall_product
    <where>
      <if test="productName!=null">
        AND productName LIKE #{productName}
      if>
      <if test="productId!=null">
        and productId=#{productId}
      if>
    where>
  select>

业务实现:

    public ServerResponse searchProduct(String productName,Integer productId,int pageNum,int pageSize){
        PageHelper.startPage(pageNum,pageSize);
        if(StringUtils.isNotBlank(productName)){
            productName=new StringBuilder().append("%").append(productName).append("%").toString();
        }
        List productList = productMapper.selectByNameAndProductId(productName,productId);
        List productListVoList = Lists.newArrayList();
        for(Product product:productList) {
            ProductListVo productListVo = assembleProductListVo(product);
            productListVoList.add(productListVo);
        }
        PageInfo pageResult=new PageInfo(productList);
        pageResult.setList(productListVoList);
        return ServerResponse.createBySuccess(pageResult);

    }

5.普通用户通过关键字和分类搜索商品

Mybatis ProductMapper.java定义如下:

List<Product> selectByNameAndProductIds(@Param("productName") String productName, @Param("categoryIdList") List<Integer> categoryIdList);

Mybatis ProductMapper.xml定义如下:

<select id="selectByNameAndProductIds" resultMap="BaseResultMap" parameterType="map">
    SELECT
    "Base_Column_List"/>
    FROM mmall_product
    <where>
      <if test="productName!=null">
        AND productName LIKE #{productName}
      if>
      <if test="productIdList!=null">
        and category_id in
        "categoryIdList" index="index" item="item" open="(" separator="," close=")">
          #{item}
        
      if>
    where>
  select>

业务层实现代码:

    public ServerResponse getProductByKeywordCategory(String keyword,Integer categoryId,int pageNum,int pageSize,String orderBy){

        if(StringUtils.isBlank(keyword) && categoryId==null){
            return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
        }
        List categoryIdList=new ArrayList();
        if(categoryId!=null){
            Category category=categoryMapper.selectByPrimaryKey(categoryId); 
            if(StringUtils.isNotBlank(keyword) && category==null){
                //没有该分类并且还没有该关键字 则返回一个空结果集
                PageHelper.startPage(pageNum,pageSize);
                List productListVoList = Lists.newArrayList();
                PageInfo pageResult=new PageInfo(productListVoList); //空结果集不需要用setList转换
                return ServerResponse.createBySuccess(pageResult);
            }
            //获取CategoryIdList service平级调用service
            iCategoryService.selectCategoryAndChildrenById(category.getId()).getData();
        }
        if(StringUtils.isNotBlank(keyword)){
            keyword=new StringBuilder().append("%").append(keyword).append("%").toString();
        }
        PageHelper.startPage(pageNum,pageSize);
        //动态排序
        if(StringUtils.isNotBlank(orderBy)){
            if(Const.ProductListOrderBy.PRICE_ASC_DESC.contains(orderBy)){ //在Const中定义排序的枚举类
                String[] orderByArray=orderBy.split("_"); //与前端约定 用下划线_隔开类别和排序方式
                PageHelper.orderBy(orderByArray[0]+" "+orderByArray[1]);
            }
        }
        List productList = productMapper.selectByNameAndProductIds(
                (StringUtils.isBlank(keyword))?null:keyword,categoryIdList.size()==0?null:categoryIdList);
        //构建ListVO
        List productListVoList=Lists.newArrayList();
        for(Product product:productList) {
            ProductListVo productListVo = assembleProductListVo(product);
            productListVoList.add(productListVo);
        }
        PageInfo pageInfo=new PageInfo(productList);
        pageInfo.setList(productListVoList);
        return ServerResponse.createBySuccess(pageInfo);
    }

Web层部分代码:

    @RequestMapping(value="list.do")
    @ResponseBody
    //这里的方法参数是可选的,因此用@RequestParam设置一下
    public ServerResponse list(@RequestParam(value = "keyword",required = false)String keyword, 
                                         @RequestParam(value = "categoryId",required = false)Integer categoryId,
                                         @RequestParam(value = "pageNum",required = false)Integer pageNum,
                                         @RequestParam(value = "pageSize",required = false)Integer pageSize,
                                         @RequestParam(value = "orderBy",required = false)String orderBy){
        return iProductService.getProductByKeywordCategory(keyword,categoryId,pageNum,pageSize,orderBy);
    }

推荐阅读
  • 单链表的高效遍历及性能优化策略
    本文探讨了单链表的高效遍历方法及其性能优化策略。在单链表的数据结构中,插入操作的时间复杂度为O(n),而遍历操作的时间复杂度为O(n^2)。通过在 `LinkList.h` 和 `main.cpp` 文件中对单链表进行封装,我们实现了创建和销毁功能的优化,提高了单链表的使用效率。此外,文章还介绍了几种常见的优化技术,如缓存节点指针和批量处理,以进一步提升遍历性能。 ... [详细]
  • 寒假作业解析:第三周 2月12日 第7题
    尽快完成之前的练习任务!每日一练2.1 Problem A Laurenty and Shop 的题目要求是选择两条不同的路线以最小化总的等待时间。简要分析:通过对比不同路线的等待时间,可以找到最优解。此问题可以通过动态规划或贪心算法来解决,具体取决于路线的复杂性和约束条件。 ... [详细]
  • 哈希表(Hash Table)是一种高效的查找算法,与传统的链表和树结构相比,其在查找过程中无需进行逐个元素的比较。本文将深入探讨哈希表的基本原理、应用场景以及优化策略,帮助读者全面理解其在实际开发中的优势和局限性。通过实例分析和代码示例,我们将展示如何有效利用哈希表提高数据处理效率,并解决常见的冲突问题。 ... [详细]
  • 在将Excel数据导入MySQL数据库的过程中,如何确保不会生成重复记录?本文介绍了一种方法,通过PHP脚本检查数据库中是否存在相同的“Code”字段值,从而避免重复记录的产生。该方法不仅提高了数据导入的准确性,还增强了系统的健壮性。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • 在洛谷 P1344 的坏牛奶追踪问题中,第一问要求计算最小割,而第二问则需要找到割边数量最少的最小割。通过为每条边附加一个单位权值,可以在求解最小割时优先选择边数较少的方案,从而同时解决两个问题。这种策略不仅简化了问题的求解过程,还确保了结果的最优性。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 使用 `git stash` 可以将当前未提交的修改保存到一个临时存储区,以便在后续恢复工作目录时使用。例如,在处理中间状态时,可以通过 `git stash` 命令将当前的所有未提交更改推送到一个新的储藏中,从而保持工作目录的整洁。此外,本文还将详细介绍如何解决 `git stash pop` 时可能出现的冲突问题,帮助用户高效地管理代码变更。 ... [详细]
  • 深入解析 Golang 中 Context 的功能与应用
    本文详细探讨了 Golang 中 Context 的核心功能及其应用场景,通过深入解析其工作机制,帮助读者更好地理解和运用这一重要特性,对于提升代码质量和项目开发效率具有重要的参考价值。 ... [详细]
  • 本文深入探讨了URAL 1297问题,重点分析了使用后缀数组求解最长回文子串的方法。通过详细解析算法的实现步骤和优化策略,本文提供了高效的解决方案,并结合实际案例进行了验证。此外,文章还讨论了后缀数组在字符串处理中的广泛应用及其性能优势。 ... [详细]
  • 本文对常见的字符串哈希函数进行了全面分析,涵盖了BKDRHash、APHash、DJBHash、JSHash、RSHash、SDBMHash、PJWHash和ELFHash等多种算法。这些哈希函数在不同的应用场景中表现出各异的性能特点,通过对比其算法原理、计算效率和碰撞概率,为实际应用提供了有价值的参考。 ... [详细]
  • 在Oracle数据库中,若需更新特定列的数据,可以通过联接两张表来实现。例如,假设我们有两张表:`sales` 和 `goods`。为了更新 `sales` 表中的某些列,可以使用 `UPDATE` 语句结合 `JOIN` 操作,确保数据的准确性和一致性。具体操作步骤包括选择需要更新的目标列,定义联接条件,并指定更新后的值。这种方法不仅提高了数据处理的效率,还保证了数据的完整性。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • MySQL索引详解及其优化策略
    本文详细解析了MySQL索引的概念、数据结构及管理方法,并探讨了如何正确使用索引以提升查询性能。文章还深入讲解了联合索引与覆盖索引的应用场景,以及它们在优化数据库性能中的重要作用。此外,通过实例分析,进一步阐述了索引在高读写比系统中的必要性和优势。 ... [详细]
  • 深入探讨:Java 8 中 HashMap 链表为何选择红黑树而非 AVL 树
    深入探讨:Java 8 中 HashMap 链表为何选择红黑树而非 AVL 树 ... [详细]
author-avatar
手机用户2502873943
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有