4.通过父级代号获取所有省/市/区和通过编号获取省/市/区名

1.总结:昨天主要是实现了通过父级代号来获取代号下面的省/市/区,以及通过代号获取对应的省/市/区

1.mapper

package com.ku.store.mapper;

import com.ku.store.entity.District;

import java.util.List;

public interface DistrictMapper {
    /**
     *  获取全国所有省/某所有市/某市所有区
     * @param parent 父级代号,当获取某市所有区时,使用市的代号;当获取省所有市时,使用省的代号;
     *               当获取全国所有省时,使用"86"作为父级代号
     * @return
     */
    List<District>findByParent(String parent);

    /**
     *  根据编码查询省份/市/区
     * @param code
     * @return
     */
    String findNameByCode(String code);
}

<?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.ku.store.mapper.DistrictMapper">
<!--asc:升序。DSC:降序;默认是升序-->
<!-- 获取全国所有省/某省所有市/某市所有区:List<District> findByParent(String parent) -->
<select id="findByParent" resultType="com.ku.store.entity.District">
SELECT
*
FROM
t_dict_district
WHERE
parent=#{parent}
ORDER BY
code ASC
</select>

<select id="findNameByCode" resultType="java.lang.String">
select
name
from
store.t_dict_district
where
code = #{code}
</select>
</mapper>

2.service

package com.ku.store.service;

import com.ku.store.entity.District;

import java.util.List;

public interface IDistrictService {
    /**
     *  获取全国所有省/某省所有市/某市所有区
     * @param parent 父级代号 当获取某市所有区时,使用市的代号;当获取某省所有市时,使用省的代号;
     *               当获取全国所有省时,使用"86"作为父级代号
     * @return 全国所有省/全省所有市/全市所有区
     */
    List<District>getByParent(String parent);

    /**
     *  根据省/市/区的行政代号获取省/市/区的名称
     * @param code 省/市/区的行政代号
     * @return 匹配的省/市/区的名称,如果没有匹配的数据则返回null
     */
    String getNameByCode(String code);
}

3.serviceImpl

package com.ku.store.service.impl;

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

import java.util.List;

@Service
public class DistrictServiceImpl implements IDistrictService {
    @Autowired
    private DistrictMapper districtMapper;

    @Override
    public List<District> getByParent(String parent) {
        List<District> list = districtMapper.findByParent(parent);
        System.out.println("count:"+list.size());
        for (District district:list) {
            district.setId(null);
            district.setParent(null);
        }
        return list;
    }

    @Override
    public String getNameByCode(String code) {
        return districtMapper.findNameByCode(code);
    }
}

4.BaseController

package com.ku.store.controller;

import com.ku.store.service.exception.*;
import com.ku.store.utils.JsonResult;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpSession;

/**
 * 该类用于响应成功的状态码以及统一处理异常 ,简化原来的controller
 */
//控制类基类
public class BaseController {
    public static final int OK = 200;

    //统一处理方法抛出的异常,此注解表示专门处理这个类的异常
    //注意:不要使用相同的注解参数,例如:Throwable e
    @ExceptionHandler({ServiceException.class, FileUploadException.class})
    public JsonResult<Void>handleException(Throwable e){
        JsonResult<Void> result = new JsonResult<>();
        if (e instanceof UsernameDuplicateException){
            result.setState(400);
            result.setMessage("用户名已存在!");
        }else if(e instanceof UserNotFoundException){
            result.setState(401);
            result.setMessage("用户名未找到!");
        }else if(e instanceof PasswordNotMatchException){
            result.setState(402);
            result.setMessage("密码不匹配!");
        }else if(e instanceof AddressCountLimitException){
            result.setState(403);
            result.setMessage("地址数量超过上限!");
        }else if(e instanceof InsertException){
            result.setState(500);
            result.setMessage("插入用户数据出现未知错误!");
        }else if(e instanceof UpdateException){
            result.setState(501);
            result.setMessage("更改用户数据出现未知错误!");
        }else if(e instanceof FileEmptyException){
            result.setState(600);
            result.setMessage("文件不能为空!");
        }else if(e instanceof FileSizeException){
            result.setState(601);
            result.setMessage("文件超过限制!");
        }else if(e instanceof FileTypeException){
            result.setState(602);
            result.setMessage("文件类型不允许!");
        }else if(e instanceof FileStateException){
            result.setState(603);
            result.setMessage("文件状态不正常!");
        }else if(e instanceof FileUploadIOException){
            result.setState(604);
            result.setMessage("文件上传流错误!");
        }
        return result;
    }

    /**
     * 从HttpSession对象中获取uid
     * @param session HttpSession对象
     * @return 当前登录用户id
     */
    protected final Integer getUidFromSession(HttpSession session){
        return Integer.valueOf(session.getAttribute("uid").toString());
    }

    /**
     * 从HttpSession对象中获取username
     * @param session HttpSession对象
     * @return 当前登录用户的username
     */
    protected final String getUsernameFromSession(HttpSession session){
        return session.getAttribute("username").toString();
    }
}

5.DistrtictController

package com.ku.store.controller;

import com.ku.store.entity.District;
import com.ku.store.service.IDistrictService;
import com.ku.store.service.impl.DistrictServiceImpl;
import com.ku.store.utils.JsonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/districts")
public class DistrictController extends BaseController{
    @Autowired
    //后面尽量使用接口,而不是实现类,因为你的mapper就是接口,所以你的Service接口也能输出,之前不能输出是自己哪里出问题了
    private IDistrictService districtService;


    @GetMapping({"","/"})
    public JsonResult<List<District>> getByParent(String parent){
        List<District> data = districtService.getByParent(parent);
        return new JsonResult<>(OK, data);
    }
  @GetMapping({"","/"})
    public JsonResult<List<District>> getNameByParent(String code){
         District data = districtService.getNameByCode(code);
         return new JsonResult<>(OK, data);
    }
}

 

2.反思:在这个部分代码的编写中,我们可以在配置文件中动态地传入一个值,在配置文件中使用user.address.max-count=XX,在测试类中通过Value("${}")注解形式赋值;

    其实编写的代码也就是简单的地址的增删改查,与前面的用户注册,登录,修改密码,以及修改资料和修改图片简单很多,但重要的是接触了获取省/市/区的形式

    在注册,登录,修改密码,修改图片主要学会了,判断用户是否存在和逻辑删除来决定是否进行后续的注册,登录,修改操作,在登录和修改密码中需要判断

    现在密码加盐值是否与之前相等才能进行后续操作,这个主要从service的实现类中进行

 

3.复盘:对前面用户模块进行回顾,顺便 要在闲暇时候看看面试题,先背下来再在后面的项目中逐渐理解

 

posted @ 2022-10-08 17:11  求知律己  阅读(200)  评论(0编辑  收藏  举报