6.1. 收货地址-增加
6.1.5. 导入全国的省市区数据
如果当前Web应用希望适用于HTML、Android、iOS等多种不同的客户端,各项数据应该都是由服务端来提供的,所以,建议把省、市、区的数据存储在数据器的数据表中。
下载脚本文件,进入mysql控制台,执行例如:
source e:/1.sql
即可完成导入。
如果使用的是Windows 10操作系统,可能出现乱码,推荐使用Navicat软件而不直接使用Command命令行,如果一定使用命令行,则需要执行set names gbk;命令,并且,这个命令只对当前窗口的当前访问有效,退出后,下次访问时仍需要再次执行该命令!
6.1.6. 服务器向客户端提供省、市、区的数据
数据访问需求:
获取全国所有省的数据
获取某个省的所有市的数据
获取某个市的所有区的数据
根据代号获取省/市/区的数据
所以,在持久层需要使用的SQL语句可能有:
SELECT * FROM t_dict_district WHERE parent=?
SELECT * FROM t_dict_district WHERE code=?
持久层
首先,创建com.company.store.entity.District
,其属性的设计可参考t_dict_district
:
public class District implements Serializable {
private Integer id;
private String parent;
private String code;
private String name;
// ...
}
创建com.company.store.mapper.DistrictMapper
接口,并声明抽象方法:
List<District> getList(String parent);
District getInfo(String code);
复制原有的某个映射文件,改名为DistrictMapper.xml
,然后配置以上接口中的抽象方法的映射。
创建TestDistrictMapper
,对以上2个方法执行测试。
业务层
创建com.company.store.serivce.IDistrictService
接口,声明同名方法。
创建com.company.store.serivce.impl.DistrictServiceImpl
类,实现以上接口,并在实现过程中,直接调用持久层对象的同名方法即可!
控制器层
创建com.company.store.controller.DistrictController
类,继承自BaseController
,使用@Controller
和@RequestMapping("/district")
注解,然后添加@Autowired private IDistrictService districtService;
属性。
然后,分析2个获取数据的请求:
获取省/市/区的列表:
请求路径:/district/list.do
请求类型:GET
请求参数:parent(*)
响应方式:ResponseResult<List<District>>
是否拦截:否,即无须登录即可访问
根据代号获取省/市/区的详细信息:
请求路径:/district/info.do
请求类型:GET
请求参数:code(*)
响应方式:ResponseResult<District>
是否拦截:否,即无须登录即可访问
添加处理请求的方法:
@RequestMapping("/list.do")
@ResponseBody
public ResponseResult<List<District>> getList(
@RequestParam("parent") String parent) {
ResponseResult<List<District>> rr = new ResponseResult<List<District>>();
List<District> districts = districtService.getList(parent);
rr.setData(districts);
return rr;
}
@RequestMapping("/info.do")
@ResponseBody
public ResponseResult<District> getList(
@RequestParam("code") String code) {
ResponseResult<District> rr = new ResponseResult<District>();
District district = districtService.getInfo(code);
rr.setData(district);
return rr;
}
执行测试:
http://localhost:8080/TeduStore/district/list.do?parent=86
http://localhost:8080/TeduStore/district/info.do?code=150000