关于省,市,区的三级联动后台的实现有两种方式:

1:分三次请求各自取出 省 市 区 的数据;

2:一次请求获得所有的数据,并且组装成相依的数据结构到前端;

其中第一种方式:

会导致数据的延迟加载,出现的情况是 省 有数据了,市和区一级还没有数据,导致用户的体验不好;这种方式只有省一级的数据可以提前加载好,市和区一级的数据只用等到选中后才开始请求;

第二种实现方式:

1):查出省--->遍历省,查出省下面的市--->遍历市,查出市下面的区:组好相应的数据结构;这种方式的缺点:多次查询数据库,市和区的数据有多少条

就会查询多少次数据库,这样效率很低,在不加缓存的情况下这种的查询中国下所有的省市区需要的时间为:18s左右

//根据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) {
//查找所有的区
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):一次性查出省市区所有的数据,然后在内存中组成相应的结构给到前台:

这种方式在没有缓存的情况下查询的时间为: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()){
//获取区
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;
}

当然我这里用的是遍历的方式来实现这种方式,也可以用递归的方式来实现这种业务;

关于省,市,区联动 java 实现方式的更多相关文章

  1. html实现 省——市——区三级联动

    html实现  省——市——区三级联动 html中实现三级联动是一个不错的demo,博主在这里跟大家分享一下实现的过程,以及自己在过程中出现的一些问题,仅供参考. 首先我们将全国的省市区数据导入进来, ...

  2. 从几个sample来学习JAVA堆、方法区、JAVA栈和本地方法栈

    最近在看<深入理解Java虚拟机>,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的结构: 感觉有 ...

  3. StoreType.java 存储方式

    StoreType.java 存储方式 http://injavawetrust.iteye.com package com.iteye.injavawetrust.miner; /** * 存储方式 ...

  4. SpringBoot学习(三)-->Spring的Java配置方式之读取外部的资源配置文件并配置数据库连接池

    三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...

  5. SpringBoot学习(二)-->Spring的Java配置方式

    二.Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @Bean Spring的Java配置方式是通过 @ ...

  6. Spring 的java 配置方式

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.1@Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration 和 @ ...

  7. 使用Java API方式的MapReduce练习

    众所周知,hadoop生态圈的多数组件都是使用java开发的. 那么使用Java API方式实现起来,显得要比其它语言效率更高,更原生态. 前面有一个Hadoop学习笔记02_MapReduce练习 ...

  8. Spring的Java配置方式—@Configuration和@Bean实现Java配置

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @BeanSpring的Java配置方式是通过 @Configuration 和 @Be ...

  9. spring的Java注解方式

    以往我们在使用spring的时候都是用一堆<>这个玩意(尖括号)的xml文件来配置spring,在xml里都是"xxx"来配置需要的内容信息,在"" ...

随机推荐

  1. Codeforces 608B. Hamming Distance Sum 模拟

    B. Hamming Distance Sum time limit per test: 2 seconds memory limit per test:256 megabytes input: st ...

  2. C语言点滴

    static修饰的变量和函数不可以在其他文件extern引用该变量或者函数. static变量放在静态内存区. static变量赋值只生效一次,再无法调用赋值语句.但是可以运算,例如++等. exte ...

  3. Phantomjs 生成多页PDF

    开篇 最近使用 Phantomjs 生成PDF,其中遇到一些问题,导致PDF生成失败,如出现空白文件或一页数据量太大,都是由于没有设置好格式导致.特别是分页问题,感觉资料很少,除了在 StackOve ...

  4. CountVectorizer()类解析

      主要可以参考下面几个链接: 1.sklearn文本特征提取 2.使用scikit-learn tfidf计算词语权重 3.sklearn官方中文文档 4.sklearn.feature_extra ...

  5. 2018.09.17 atcoder Tak and Hotels(贪心+分块)

    传送门 一道有意思的题. 一开始想错了,以为一直lowerlowerlower_boundboundbound就可以解决询问,结果交上去TLE了之后才发现时间复杂度是错的. 但是贪心思想一定是对的,每 ...

  6. Cadence丢失了csdCommon.dll

    http://bbs.elecfans.com/jishu_450237_1_1.html

  7. SecureCRT和乱码

    示例: # ls /usr/local/r3c/bin/lib /bin/ls: /usr/local/r3c/bin/lib: ????????? 查看系统字符集设置: # locale LANG= ...

  8. 关于RabbitMQ一点

    RabbitMQ是AMQP(高级消息队列协议)的标准实现,理论上可以保证消息发送的准确性 RabbitMQ是用Erlang语言编写的,而Erlang语言具有以下特点: 并发性--Erlang支持超大量 ...

  9. HDU1078 FatMouse and Cheese(DFS+DP) 2016-07-24 14:05 70人阅读 评论(0) 收藏

    FatMouse and Cheese Problem Description FatMouse has stored some cheese in a city. The city can be c ...

  10. iOS应用开发最佳实践

    <iOS应用开发最佳实践> 基本信息 作者: 王浩    出版社:电子工业出版社 ISBN:9787121207679 上架时间:2013-7-22 出版日期:2013 年8月 开本:16 ...