SSM架构商城项目(七)

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

猜你喜欢

转载自www.cnblogs.com/wood-life/p/10290872.html