12.收货地址模块-新增收货地址②

本博客处理该部分
在这里插入图片描述

1.业务流程

在这里插入图片描述

  • 首先通过观察表得知,该表是将省、市、区都进行了存放,省的parent是国(编号是86),市的parent是省(编号依省而定),区的parent是市(编号依市而定),用户在页面的操作肯定是,先选择省份下拉框,得到所有市的数据,选择市以后,得到所有区的数据,再加上省一开始就能选择,说明进入页面以后,发送了一次请求,得到国家下的所有省份,综合以上操作,都是根据parent进行查询
  • 查询到的数据返回给前端,前端将下拉框里的选项和数据中的code进行绑定,以便进行下一级的查询返回

2.实体类

package com.cy.store.entity;

import java.util.Objects;

/**
 * @author ZhangHailong
 * @date 2022/5/13 - 22:52
 * @project_name 省、市、区实体类
 */
public class District {

    private Integer id;
    /*
    * parent: 省或市或区的上一级编号,
    *   如省的上一级是中国,代号是86
    *   市的上一级是省,parent就是该省的代号
    *   区的上一级是市,parent就是该市的代号
    *
    * code: 当前省或市或区的编号
    * name: 当前省或市或区的名称
    * */
    private String parent;
    private String code;
    private String name;
    
    // 省略get,set,equals(),hashCode(),toString()

3.持久层接口及mapper映射

package com.cy.store.dao;

import com.cy.store.entity.District;

import java.util.List;

/**
 * @author ZhangHailong
 * @date 2022/5/13 - 23:04
 * @project_name 省市区持久层接口
 */
public interface DistrictDao {

    /**
     *@描述 根据当前级的编码parent查找它的子节点们
     *@参数 当前级的编码
     *@返回值 子节点
     *@创建人 ZhangHailong
     */
    List<District> selectDistrictsByParent(String parent);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.cy.store.dao.DistrictDao">

    <!--select|insert|update|delete语句-->

    <select id="selectDistrictsByParent" resultType="com.cy.store.entity.District">
        SELECT * FROM t_dict_district WHERE parent=#{parent} ORDER BY code ASC
    </select>
</mapper>

4.业务层

package com.cy.store.service.impl;

import com.cy.store.dao.DistrictDao;
import com.cy.store.entity.District;
import com.cy.store.service.IDistrictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author ZhangHailong
 * @date 2022/5/13 - 23:29
 * @project_name 省市区业务层抽象方法实现类
 */
@Service
public class DistrictServiceImpl implements IDistrictService {

    @Autowired
    private DistrictDao districtDao;

    @Override
    public List<District> getDistrictsByParent(String parent) {

        /*
        * 该业务方法的功能就是,将用户当前层选择的省或市或区作为父节点,查找其下的子节点,信息包括子节点的编号和名称
        * 但是持久层查找的是满足条件的所有字段,但其实id和parent是两个无用的数据,将其设置为null,一方面节省了流量,另一方面提高了性能
        * 也可以在持久层代码上只查找需要的两个字段,其他的结果就是null
        * 但是在这里,不改变持久层代码,而是手动将无用的字段设置为null,可以提高持久层代码的复用性
        * */
        List<District> list = districtDao.selectDistrictsByParent(parent);
        for (District d : list) {
            d.setId(null);
            d.setParent(null);
        }

        return list;
    }
}

5.控制层

package com.cy.store.controller;

import com.cy.store.entity.District;
import com.cy.store.service.IDistrictService;
import com.cy.store.util.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author ZhangHailong
 * @date 2022/5/13 - 23:40
 * @project_name
 */

@RestController
@RequestMapping("district")
public class DistrictController extends BaseController{

    @Autowired
    private IDistrictService iDistrictService;

    @RequestMapping(value = "getDistricts", method = RequestMethod.GET)
    public JsonResult<List<District>> getDistrictsByParentController(String parent) {

        List<District> list = iDistrictService.getDistrictsByParent(parent);

        return new JsonResult<>(OK, list);
    }

}

6.补充

  1. 在之前添加用户收货地址的业务层方法中,有三个字段proviceName,cityName,areaName没有获取到,只获取到了其对应的编号,provinceCode,cityCode,areaCode,所以在此补全

  2. 持久层接口及mapper映射代码

    /**
     *@描述 根据省或市或区的编号查找它的名称
     *@参数 编号
     *@返回值 名称
     *@创建人 ZhangHailong
     */
    String selectDistrictNameByCode(String code);
    
    <select id="selectDistrictNameByCode" resultType="java.lang.String">
        SELECT name FROM t_dict_district WHERE code=#{code}
    </select>
    
  3. address业务层补全代码

    // 补全其他信息部分2
    String provinceName = districtDao.selectDistrictNameByCode(address.getProvinceCode());
    String cityName = districtDao.selectDistrictNameByCode(address.getCityCode());
    String areaName = districtDao.selectDistrictNameByCode(address.getAreaCode());
    address.setProvinceName(provinceName);
    address.setCityName(cityName);
    address.setAreaName(areaName);
    

至此,新增收货地址业务完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值