关于省,市,区联动 java 实现方式
關于省,市,區(qū)的三級聯(lián)動后臺的實現(xiàn)有兩種方式:
1:分三次請求各自取出 省 市 區(qū) 的數(shù)據(jù);
2:一次請求獲得所有的數(shù)據(jù),并且組裝成相依的數(shù)據(jù)結構到前端;
其中第一種方式:
會導致數(shù)據(jù)的延遲加載,出現(xiàn)的情況是 省 有數(shù)據(jù)了,市和區(qū)一級還沒有數(shù)據(jù),導致用戶的體驗不好;這種方式只有省一級的數(shù)據(jù)可以提前加載好,市和區(qū)一級的數(shù)據(jù)只用等到選中后才開始請求;
第二種實現(xiàn)方式:
1):查出省--->遍歷省,查出省下面的市--->遍歷市,查出市下面的區(qū):組好相應的數(shù)據(jù)結構;這種方式的缺點:多次查詢數(shù)據(jù)庫,市和區(qū)的數(shù)據(jù)有多少條
就會查詢多少次數(shù)據(jù)庫,這樣效率很低,在不加緩存的情況下這種的查詢中國下所有的省市區(qū)需要的時間為:18s左右
//根據(jù)id查找出最頂層對象TbTreeExample example=new TbTreeExample();example.createCriteria().andIdEqualTo(id);TbTree tree = tbTreeMapper.selectByExample(example).get(0);//查找所有的省份 TbTreeExample provinceExample=new TbTreeExample(); provinceExample.createCriteria().andPIdEqualTo(id); List<TbTree> provinces = tbTreeMapper.selectByExample(provinceExample); for (TbTree province : provinces) { //查找所有的市 TbTreeExample cityExample=new TbTreeExample(); cityExample.createCriteria().andPIdEqualTo(province.getId()); List<TbTree> cities = tbTreeMapper.selectByExample(cityExample); for (TbTree city : cities) { //查找所有的區(qū) TbTreeExample districtExample=new TbTreeExample(); districtExample.createCriteria().andPIdEqualTo(city.getId()); List<TbTree> districts = tbTreeMapper.selectByExample(districtExample); city.setNodes(districts); } province.setNodes(cities); } tree.setNodes(provinces); return tree;2):一次性查出省市區(qū)所有的數(shù)據(jù),然后在內存中組成相應的結構給到前臺:
這種方式在沒有緩存的情況下查詢的時間為:0.7-0.8s左右;
代碼如下:
TbTreeExample example=new TbTreeExample();List<TbTree> trees = tbTreeMapper.selectByExample(example);for (TbTree country : trees) {if(country.getId()==id){ //獲取省 for(TbTree province : trees){ if(province.getpId()==country.getId()){ //獲取市 for (TbTree city : trees) { if(city.getpId()==province.getId()){ //獲取區(qū) for (TbTree district : trees) { if(district.getpId()==city.getId()){ city.getNodes().add(district); } } province.getNodes().add(city); } } country.getNodes().add(province); } } return country; } } return null; }當然我這里用的是遍歷的方式來實現(xiàn)這種方式,也可以用遞歸的方式來實現(xiàn)這種業(yè)務;
總結
以上是生活随笔為你收集整理的关于省,市,区联动 java 实现方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从HttpServletRequest获
- 下一篇: JMS学习(六)--提高非持久订阅者的可