关于省,市,区联动 java 实现方式
关于省,市,区的三级联动后台的实现有两种方式:
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 实现方式相关推荐
- java联动_关于省,市,区联动 java 实现方式
关于省,市,区的三级联动后台的实现有两种方式: 1:分三次请求各自取出 省 市 区 的数据: 2:一次请求获得所有的数据,并且组装成相依的数据结构到前端: 其中第一种方式: 会导致数据的延迟加载,出现 ...
- 国,省,市,区(县)(四级联动)
国,省,市,区(县)(四级联动) 一, 技术栈:Vue + Quasar + Vuelidate + axios 二, 具体代码(表单验证规则Vuelidate上篇文章已经写过了,这里就不多做介绍咯) ...
- 可以保值的3级 省、市、区联动下拉框
<script src="../../bkad/incontent.js" type="text/javascript"></script&g ...
- 【Uni-App】用 uView 组件库中的u-picker 实现地区的 省-市-区 三级联动确认回显
目录 一:准备工作 二:json文件数据 例1 例2 三:先做个按钮做弹窗显示 四:使用组件 五:用到的变量 六:初始化数据 七:数据变更时的方法 八:点击确认时的方法 九:数据的回填 这是选中效果 ...
- uniapp 用 uView 组件库中的u-picker 实现地区的 省-市-区 三级联动
组件的引入就不多赘述了 直接看使用方法 地址我是引入的json文件数据结构大概是这个样子 例1 例2 1,先做个按钮做弹窗显示 <u-cell :border="true" ...
- jQuery实现后台异步加载数据的省、市二级联动
实现省.市的二级联动,网上的案例大都是死数据,不好和后台交互,于是自己动手写了一个,前台jsp+jquery,后台是spring mvc的controller,用异步来加载数据.废话不多说,上代码!( ...
- 政务云公共服务区与资源共享区数据交换的方式
上文<宁波政务云资源的介绍与申请>介绍过,公共服务区与资源共享区是不能互访的,只能是资源共享区单向访问公共服务区. 我有一项目,要能互联网访问,又要访问"宁波大数据共享平台&qu ...
- JVM运行时数据区之Java堆
堆的概述: 一个JVM实例只存在一个堆内存,堆是Java内存管理的核心区域. Java堆区在JVM启动的时候即被创建,其空间大小也就确定了.是JVM管理的最大一块内存空间. 堆的大小是可以调节的. & ...
- Spring的Java配置方式
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1 @Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration ...
最新文章
- 【转】RelativeLayout和LinearLayout及FrameLayout性能分析
- mysql $lt_MongoDB与Mysql常用命令解释
- 【codevs 1315】1315 摆花2012年NOIP全国联赛普及组(dp)
- pickle序列化存在安全隐患
- 通过日志恢复SQL Server的历史数据
- filename: core/loader.php,使用第三方包后出现的这个错误,你们都遇到过吗?
- 计算机科学陈国华,科学网—模式识别与智能系统是个什么专业? - 晏燕华的博文...
- html+css+js实现关键词随机图片
- C++ 枚举类型的思考
- Facebook 真的「非死不可」吗?
- 《zw版·Halcon-delphi系列原创教程》halconxlib控件列表
- ROBOCOPY命令
- php 输出中文文件名乱码,PHP fopen中文文件名乱码问题解决方案
- 武汉理工大学计算机考研专业代码,武汉理工大学代码及专业代码
- linux zip加压到文件夹,Linux下zip压缩和unzip解压缩命令全解
- matlab特殊符号表示,matlab特殊符号输入
- Spring Microservices in Action中文版
- 全国各省10米分辨率的土地利用数据的制作与分享
- 基于ARM架构openEuler系统通过qemu模拟器自动安装启动ARM架构的openEuler虚拟机
- rancher k8s集群pod一直处于Pending状态