获取省市区列表-数据库
CREATE TABLE t_dict_district ( id int(11) NOT NULL AUTO_INCREMENT, parent varchar(6) DEFAULT NULL, code varchar(6) DEFAULT NULL, name varchar(16) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
parent属性表示的是父区域代码号,省的代码号+86。
获取省市区列表-实体类创建一个District实体类。
private Integer id;//唯一标识 private String parent;//父区域代号 private String code;//本区域代号 private String name;//代号所表示的名称获取省市区列表-持久层
查询语句,根据父代号进行查询。
select * from t_dict_district where parent=? order by code ASC
抽象方法的定义。 DistrictMapper接口。
package com.cy.store.mapper; import com.cy.store.entity.District; import java.util.List; public interface DistrictMapper { ListfindByParent(Integer parent); }
在配置文件中编写对应的SQL
SELECT * FROM t_dict_district WHERe parent = #{parent} ORDER BY code ASC
创建类测试接口
@Test public void findByParent() { List获取省市区列表-业务层districts = districtMapper.findByParent("110100"); for (District district : districts) { System.out.println(district); } }
1.创建接口IUdstrictService,并定义抽象方法。
package com.cy.store.service; import com.cy.store.entity.District; import java.util.List; public interface IDistrictService { ListgetByParent(String parent); }
2.创建DistrictServiceImpl实现类,实现抽象方法。
package com.cy.store.service.impl; import com.cy.store.entity.District; import com.cy.store.mapper.DistrictMapper; import com.cy.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 ListgetByParent(String parent) { List districts = districtMapper.findByParent(parent); for (District district : districts) { district.setId(null); district.setParent(null); } return districts; } }
3.单元测试
@Test public void getByParent() { List获取省市区列表-控制层 设计请求districts = districtService.getByParent("86"); for (District district : districts) { System.err.println(district); } }
/districts/
GET
String parent
JsonResult
创建一个DistrictController类, 在类中来编写处理请求的方法。
@RestController @RequestMapping("/districts") public class DistrictController extends baseController{ @Autowired private IDistrictService districtService; //districts的请求都拦截到getByParent()方法 @RequestMapping({"/",""}) public JsonResult> getByParent(String parent){ List
data = districtService.getByParent(parent); return new JsonResult<>(OK,data); }
district请求添加白名单中。
patterns.add("/districts String findNameByCode(String code); }
3.在DistrictMapper.xml文件中添加抽象方法的映射。
4.测试持久层接口
@Test public void findNameByCode() { String name = districtMapper.findNameByCode("610000"); System.out.println(name); }获取省市区的名称-业务层
1.在业务层没有异常处理
2.定义对应的业务层接口中的抽象方法。
String getNameByCode(String code);
3.编写接口对应的实现类
@Override public String getNameByCode(String code) { String name = districtMapper.findNameByCode(code); return name; }
4.测试可以省略不写(超过8行以上代码都要测试)。
获取省市区的名称-控制层优化1.添加地址层依赖于IDistrictService层。
//在添加用户的收货地址的业务层依赖于IDidtrictService的业务层接口
@Autowired private IDistrictService districtService;
2.在addNewAddress方法中将districtService接口中获取到的省市区数据转移到address对象,这个对象中就包含了所有用户收货地址的数据。
//对address对象中的数据进行补全:省 市 区 String provinceName = districtService.getNameByCode(address.getProvinceCode()); String cityName = districtService.getNameByCode(address.getCityCode()); String areaName = districtService.getNameByCode(address.getAreaCode()); address.setProvinceCode(provinceName); address.setCityName(cityName); address.setAreaName(areaName);获取省市区的名称-前端页面
1.addAddress.html页面中编写对应的省市区展示及根据不同用户的不同选择来限制对应的便签中的内容。
2.编写相关的事件代码。