首页 > 其他分享 >springboot整合项目-商城新增收货地址功能

springboot整合项目-商城新增收货地址功能

时间:2022-11-06 15:00:44浏览次数:100  
标签:String parent 收货 地址 address 省市区 商城 springboot

新增收货地址

持久层

1.新增 规划sql语句

insert into t_adress(字段列表)  values (值列表)   

2.一个用户的收货地址规定最多只能由20条数据对应,在插入用户数据之前先做查询操作。收货地址逻辑控制当面的一个异常(如果一个在添加收货地址的时候已经有20个收货地址了)

select count(*) from t_address where uid = #{uid}

3.创建一个新的接口 address 在这个接口中来定义sql语句抽象方法的定义

业务层

1.规划异常

1.如果这个用户是第一次插入用户的收回地址,规则:当用户插入的地址是第一条地址时,需要将当前的地址作为默认的收货地址,如果查询到统计总数为0则将当前的地址的is_default值设置为1.查询统计的结果为0不代表异常
查询的结果大于20了,这时候抛出业务控制的异常AddressCountLimitException 放到service包下,继承ServiceException

2.接口与抽象方法,在定义业务的抽象方法 IAddressService

创建一个实现类 AddressServiceImpl 去实现

3.

public void addNewAddress(Address address, Integer uid, String username)

@Override
  public void addNewAddress(Address address, Integer uid, String username) {
      Integer integer = addressMapper.countByUid(uid);
      if (integer >=  maxCount) {
          throw  new AddressCountLimitException("收货地址超过20条");

      }
      //uid  isDefault
      address.setUid(uid);
      Integer isDefault = integer == 0 ? 1:0;
      address.setIsDefault(isDefault);
      //补齐4个日志
      address.setCreatedUser(username);
      address.setCreatedTime(new Date());
      address.setModifiedUser(username);
      address.setModifiedTime(new Date());
      
      Integer insert = addressMapper.insert(address);
      if (insert != 1) {
          throw  new InsertException("新增收货地址失败");
      }
  }

4.测试类

 @Test
    void addNewAddress(){
        Address address = new Address();
        address.setName("女朋友2");
        address.setPhone("16638992452");
        address.setUid(6);
        address.setAddress("福建省福州市闽侯县上街镇");
        addressService.addNewAddress(address,6,"管理员");
    }

控制层

.异常处理 发生AddressCountLimitException异常,在BaseController添加上次异常,进行处理

else if (e instanceof AddressCountLimitException){
           result.setState(4001);
           result.setMessage("购物车地址超出限制的异常");
       }

2.请求设计

/addresses/add_new_address

/post

/Address address HttpSession session

/JsonResult

前端页面

获取省市区列表

持久层:

1.创建sql语句

 select * from t_dict_district where parent=? order by code asc

2.抽象方法的定义
DistrictMapper

 /**
     * 根据父代号查询区域信息
     * @param parent
     * @return
     */
    List<District> findByParent(String parent);

3.测试

@Test
   void testFindByParent(){
       List<District> byParent = districtMapper.findByParent("210100");
       log.info("查询的结果为:{}",byParent);
   }

2.业务层

1.准备工作

1.创建一个接口IDistrictService
2.实现类:DistrictServiceImpl

package com.cy.store.service;

import com.cy.store.pojo.District;

import java.util.List;

/**
 * 省份列表查询的抽象类  service层
 */
public interface IDistrictService {
    /**
     * 根据父代号来查询区域的信息(省市区)
     * @param parent
     * @return
     */
    List<District> getByParent(String parent);
}

package com.cy.store.service.impl;

import com.cy.store.mapper.DistrictMapper;
import com.cy.store.pojo.District;
import com.cy.store.service.IDistrictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @PROJECT_NAME: store
 * @DESCRIPTION:
 * @USER: 28416
 * @DATE: 2022/11/5 16:43
 */
@Service
public class DistrictServiceImpl   implements IDistrictService {

    @Autowired
    DistrictMapper districtMapper;
    @Override
    public List<District> getByParent(String parent) {
        List<District> byParent = districtMapper.findByParent(parent);
        //在进行网络数据传输时,为了尽量避免无效的数据的传输,可以将无效的数据设置为null,可以节省流量,另一方面提了效率
        for (District district : byParent) {
            district.setId(null);
            district.setParent(null);
        }
        return byParent;
    }
}

请求设计

/districts
/get
String parent
/JsonResult

2.请求处理

创建一个类DistrictController

 @RequestMapping({"/",""})
    public JsonResult<List<District>> getByParentId(String parent){
        List<District> data = departmentService.getByParent(parent);

        return new JsonResult<>(OK,data);

    }

网页端的书写:

1.注释到js代码相关的数据
2.检查前端页面在提交省市区数据时是否相关name属性和id属性。
3.运行前端看是否还可以正常的保存数据(除了省市区以外)

获取省市区的名称

持久层

1.规划sql语句根据当前code来获取当前省市区的名称,对应的就是一条查询语句

select * from t_dist_district where code = ?

2.在接口中定义出来 findNameByCode

2.业务层

1.定异常
2.接口和抽象方法

  /**
     * 查询省市区的名称
     * @param code
     * @return
     */
    @Override
    public String getNameByCode(String code) {
        return districtMapper.findNameByCode(code);
    }
}

3.测试可以省略(超过8行都要进行独立的测试)

控制层

1.异常解决(无异常)

2.请求规划 -业务层优化,
/districts/get_name
/get
/String code
/JsonResult data

1.在添加地址层依赖于IDistrictService 层
2.在addNewAddress方法中将districtService接口中获取到完整的数据设置到address 则 会返回一个完整的address

   //优化代码  将address的数据进行补全   在AddressServiceImpl中进行修改

        String provinceName = districtService.getNameByCode(address.getProvinceCode());
        String cityName= districtService.getNameByCode(address.getCityCode());
        String areaName= districtService.getNameByCode(address.getAreaCode());
        address.setProvinceName(provinceName);
        address.setCityName(cityName);
        address.setAreaName(areaName);

获取省市区-前端页面的

1.addAddress.html页面中来编写对应的省市区展示以及根据用户的不同选择来展示不同的内容

2.编写相关事件代码
gitee连接:https://gitee.com/lmr0226/stores

标签:String,parent,收货,地址,address,省市区,商城,springboot
From: https://www.cnblogs.com/wiseleer/p/16862613.html

相关文章

  • Springboot2.x 结合 redis 实现ip请求次数限制
    参考https://cloud.tencent.com/developer/article/1607647SpringBoot整合Redis代码详解,四步搞定!https://blog.csdn.net/jinyangbest/article/details/98205802sprin......
  • SpringBoot 自动装配原理
    SpingBoot如何实现自动配置​​SpringBoot​​都需要创建一个​​mian​​启动类,而启动类都含有​​@SpringBootApplication​​注解,从启动类,一步步探索源码。@SpringBoo......
  • SpringBoot 自动装配原理
    早期的Spring项目需要添加需要配置繁琐的xml,比如MVC、事务、数据库连接等繁琐的配置。SpringBoot的出现就无需这些繁琐的配置,因为SpringBoot基于约定大于配置的理念,在......
  • SpringBoot03(读取配置内容)
    SpringBoot读取propriety/yml/yaml配置中的内容3种方法方法1@value@RestControllerpublicclassHelloController{/*@Value("${XXXX}")这个是@Value的固定格式,XX......
  • springboot自定义starter集成controller、Dao
    springboot自定义starter集成controller、Dao编写starer,其他服务直接引入既可以,通常步骤为:pom中引入需要的依赖删除spring-boot-maven-plugin插件resources下新建spring.fac......
  • 小米商城实例(部分)
    xiaomiShop.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="vi......
  • SpringBoot实战笔记:02_使用注解与Java配置的Aop示例
    转载:https://blog.csdn.net/android_zyf/article/details/79579875<!--02_新的依赖--><!--导入spring的aop支持--><dependency><groupId>${spring-groupId}</groupId>......
  • SpringBoot实战笔记:01_Spring中的Java配置
    转载:https://blog.csdn.net/android_zyf/article/details/79579862Spring4.x与SpringBoot都推荐使用Java配置xml配置:将bean的信息配置在xml配置文件中注解配置:在对应的bea......
  • SpringBoot报错解决
    1-问题:2022-11-0516:25:09.334ERROR18989---[main]o.s.b.d.LoggingFailureAnalys解决:在java的入口把@SpringBootApplication改成@SpringBootApplication(exclude={......
  • SpringBoot02-对yaml的介绍(配置环境)
    一、SpringBoot配置文件的分类和优先级配置的介绍:yaml二、介绍yaml格式1-他和其他传统格式的不同2-yaml的基本语法3-yaml数据格式代码块解析:server:port:80......