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

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. 什么是tcp协议?

    这是世界上最顶尖的tcp讲解技术...

  2. 22条常用JavaScript开发小技巧

    1.使用var声明变量 如果给一个没有声明的变量赋值,默认会作为一个全局变量(即使在函数内赋值).要尽量避免不必要的全局变量. 2.行尾使用分号 虽然JavaScript允许省略行尾的分号,但是有时不 ...

  3. Metro Revealed: Building Windows 8 apps with XAML and C# 阅读笔记

    第一章1.1.3中提到 Jesse Liberty 的<Pro Windows 8 Development with XAML and C#>,这是一本关于win8更全面的书,以后看.

  4. 100 floors 2 eggs

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...

  5. 链家笔试链家——找寻最小消费获取最大平均分java

    链家找寻最小消费获取最大平均分 输入: 5 5 4#表示科目数n,每科最大分值r,平均分avg 5 2#每科的实际得分,分数加1分的消耗的能量 4 7 3 1 3 2 2 5 输出: 4 #到达n*a ...

  6. 高博-《视觉SLAM十四讲》

    0 讲座 (1)SLAM定义 对比雷达传感器和视觉传感器的优缺点(主要介绍视觉SLAM) 单目:不知道尺度信息 双目:知道尺度信息,但测量范围根据预定的基线相关 RGBD:知道深度信息,但是深度信息对 ...

  7. PAT甲 1012. The Best Rank (25) 2016-09-09 23:09 28人阅读 评论(0) 收藏

    1012. The Best Rank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To eval ...

  8. OpenGL模型视图变换、投影变换、视口变换的理解

    OpenGL中不设置模型,投影,视口,所绘制的几何图形的坐标只能是-1到1(X轴向右,Y轴向上,Z轴垂直屏幕向外). 产生目标场景的过程类似于用照相机进行拍照: (1)把照相机固定在三角架上,并让他对 ...

  9. node.excel

    今天突然间想起来用node如何操作excel,记得之前用Java的poi操作excel,感觉特别爽,计算机代替人的工作,非常有用,所以决定摸索一下. 在网上找了各种模块,有导出的,有导入的,有转为js ...

  10. Windows Phone 放开政策 - 应用内支付(IAP)可加入三方支付

    Windows Phone 应用商店在 今年(2013)11月04号 修改了商店政策 允许公司账户的应用使用三方支付SDK. 通过 App certification requirements cha ...