省市县三级联动查询
所用技术有springboot、elementUI、redis、mybatisPlus
一、首先进入elementUI组件
然后找到Cascader 级联选择器组件,把这个组件复制到自己页面上
二、观察该组件的数据结构
这是为了知道在后端要传什么数据过来
三、编写后台接口
代码如下:
@RestController
public class ProvinceController {
@Autowired
private ProVinceService proVinceService;
@RequestMapping("/getResource")
public List<ProvinceDto> getResource(){
return proVinceService.getResource();
}
}
这是controller层代码
@Service
public class ProVinceServiceImpl implements ProVinceService {
@Autowired
private CityDao cityDao;
@Autowired
private ProvinceDao provinceDao;
@Autowired
private TownDao townDao;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Override
public List<ProvinceDto> getResource() {
//判断redis是否命中
if (stringRedisTemplate.opsForValue().get("test")!=null){
String s = stringRedisTemplate.opsForValue().get("test");
//将redis中的数据转换为集合
List<ProvinceDto> provinceDtoList = JSONObject.parseArray(s, ProvinceDto.class);
return provinceDtoList;
}else {
//省份信息
List<Province> provinces = provinceDao.selectList(null);
List<ProvinceDto> provinceDtoList = ProvinceConvent.INSTANCE.proList2dtoList(provinces); //转成dto
for (int i = 0; i < provinceDtoList.size(); i++) {
ProvinceDto provinceDto = provinceDtoList.get(i);
//城市信息
List<City> cities = cityDao.selectList(new LambdaQueryWrapper<City>().eq(City::getProvincecode, provinceDtoList.get(i).getValue()));
List<CityDto> cityDtoList = CityConvent.INSTANCE.cityList2dtoList(cities); //转成dto
for (CityDto cityDto : cityDtoList) {
//区县信息
List<Town> towns = townDao.selectList(new LambdaQueryWrapper<Town>().eq(Town::getCitycode, cityDto.getValue()));
cityDto.setChildren(TownConvent.INSTANCE.townList2dtoList(towns));//将区县信息放到城市信息中
}
provinceDto.setChildren(cityDtoList); //将城市信息放到省份信息中
}
//将数据存入redis
stringRedisTemplate.opsForValue().set("test", JSON.toJSONString(provinceDtoList),30, TimeUnit.MINUTES);
return provinceDtoList;
}
}
}
这是service层代码