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

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. eclipse安装automake

    help->Install new software

  2. 专2-第一课 Ubuntu系统安装与配置

    1.1 使用VMware安装Ubuntu 1.1.1 准备工作 1)VMware的安装包 VMware至少要用10.0版本,本文采用最新的VMware12版本,这个版本对USB3.0的支持更加完善稳定 ...

  3. NAND FLASH和LCD电路图

  4. 技术管理zz

    1.管理者最重要的是规划Roadmap 技术管理者并不能完全脱离技术.最少要把握最新技术的发展,了解团队当前技术现状和不足.用于规划的时间应该不少于50%的工作时间.具体而言,规划又分为业务规划和团队 ...

  5. Android 长时间运行任务说明

    android 4.0 后,小米手机需要授权 自动启动 (在安全中心权限里设置),不然AlarmManager设置系统闹钟将不起作用

  6. HDU 3681 Prison Break (二分 + bfs + TSP)

    题意:给定上一个 n * m的矩阵,你的出发点是 F,你初始有一个电量,每走一步就会少1,如果遇到G,那么就会加满,每个G只能第一次使用,问你把所有的Y都经过,初始电量最少是多少. 析:首先先预处理每 ...

  7. spring p 标签

    需要引入命名空间 xmlns:p="http://www.springframework.org/schema/p" p 是什么含义 p 是 property 的缩写,为了简化be ...

  8. 记录:Web相关政策之备案号、视频播放

    (一)备案号链接: 服务器在国内的网站受工信部监管,并受其颁布的<管理办法>约束.根据<互联网信息服务管理办法>及<非经营性互联网信息服务备案管理办法>的法律法规, ...

  9. 使用系统的CoreLocation定位

    ////  ViewController.m//  LBS////  Created by tonnyhuang on 15/8/28.//  Copyright (c) 2015年 tonnyhua ...

  10. tensorflow1.12 cuda10 cudnn7

    https://download.csdn.net/download/giselite/10909984 https://blog.csdn.net/chary8088/article/details ...