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

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. java联动_关于省,市,区联动 java 实现方式

    关于省,市,区的三级联动后台的实现有两种方式: 1:分三次请求各自取出 省 市 区 的数据: 2:一次请求获得所有的数据,并且组装成相依的数据结构到前端: 其中第一种方式: 会导致数据的延迟加载,出现 ...

  2. 国,省,市,区(县)(四级联动)

    国,省,市,区(县)(四级联动) 一, 技术栈:Vue + Quasar + Vuelidate + axios 二, 具体代码(表单验证规则Vuelidate上篇文章已经写过了,这里就不多做介绍咯) ...

  3. 可以保值的3级 省、市、区联动下拉框

    <script src="../../bkad/incontent.js" type="text/javascript"></script&g ...

  4. 【Uni-App】用 uView 组件库中的u-picker 实现地区的 省-市-区 三级联动确认回显

    目录 一:准备工作 二:json文件数据 例1 例2 三:先做个按钮做弹窗显示 四:使用组件 五:用到的变量 六:初始化数据 七:数据变更时的方法 八:点击确认时的方法 九:数据的回填 这是选中效果 ...

  5. uniapp 用 uView 组件库中的u-picker 实现地区的 省-市-区 三级联动

    组件的引入就不多赘述了 直接看使用方法 地址我是引入的json文件数据结构大概是这个样子 例1 例2 1,先做个按钮做弹窗显示 <u-cell :border="true" ...

  6. jQuery实现后台异步加载数据的省、市二级联动

    实现省.市的二级联动,网上的案例大都是死数据,不好和后台交互,于是自己动手写了一个,前台jsp+jquery,后台是spring mvc的controller,用异步来加载数据.废话不多说,上代码!( ...

  7. 政务云公共服务区与资源共享区数据交换的方式

    上文<宁波政务云资源的介绍与申请>介绍过,公共服务区与资源共享区是不能互访的,只能是资源共享区单向访问公共服务区. 我有一项目,要能互联网访问,又要访问"宁波大数据共享平台&qu ...

  8. JVM运行时数据区之Java堆

    堆的概述: 一个JVM实例只存在一个堆内存,堆是Java内存管理的核心区域. Java堆区在JVM启动的时候即被创建,其空间大小也就确定了.是JVM管理的最大一块内存空间. 堆的大小是可以调节的. & ...

  9. Spring的Java配置方式

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

最新文章

  1. 【转】RelativeLayout和LinearLayout及FrameLayout性能分析
  2. mysql $lt_MongoDB与Mysql常用命令解释
  3. 【codevs 1315】1315 摆花2012年NOIP全国联赛普及组(dp)
  4. pickle序列化存在安全隐患
  5. 通过日志恢复SQL Server的历史数据
  6. filename: core/loader.php,使用第三方包后出现的这个错误,你们都遇到过吗?
  7. 计算机科学陈国华,科学网—模式识别与智能系统是个什么专业? - 晏燕华的博文...
  8. html+css+js实现关键词随机图片
  9. C++ 枚举类型的思考
  10. Facebook 真的「非死不可」吗?
  11. 《zw版·Halcon-delphi系列原创教程》halconxlib控件列表
  12. ROBOCOPY命令
  13. php 输出中文文件名乱码,PHP fopen中文文件名乱码问题解决方案
  14. 武汉理工大学计算机考研专业代码,武汉理工大学代码及专业代码
  15. linux zip加压到文件夹,Linux下zip压缩和unzip解压缩命令全解
  16. matlab特殊符号表示,matlab特殊符号输入
  17. Spring Microservices in Action中文版
  18. 全国各省10米分辨率的土地利用数据的制作与分享
  19. 基于ARM架构openEuler系统通过qemu模拟器自动安装启动ARM架构的openEuler虚拟机
  20. rancher k8s集群pod一直处于Pending状态

热门文章

  1. 如何检查php代码规范,用CodeSniffer检查PHP项目的代码规范
  2. 初探百度大数据分析挖掘平台Jarvis
  3. 通过scatter图寻找噪音
  4. 深入了解softmax
  5. rnn参数共享的原因之一
  6. c 没有mysql名称空间_MySQL如何删除#sql开头的临时表
  7. python 编程该看那些书籍_我用python5年后,我发现学python编程必看的三本书!
  8. java数组 序列化_程序猿的日常——Java基础之clone、序列化、字符串、数组
  9. 一种mac使用机械键盘的解决方案
  10. LeetCode:62. 不同路径