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