日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

java 数据库中获取省市级json数据

發布時間:2025/6/15 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 数据库中获取省市级json数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求:

  根據數據庫表,獲取省市縣的級連json數據,供前臺下拉列表。效果圖

  

表結構:

1 CREATE TABLE `bxqk_pe_area` ( 2 `id` int(11) NOT NULL AUTO_INCREMENT, 3 `fk_parent_id` int(11) DEFAULT NULL COMMENT '父id', 4 `name` varchar(20) NOT NULL COMMENT '名稱', 5 `flag_active` varchar(50) NOT NULL COMMENT '是否有效', 6 `type` int(11) NOT NULL COMMENT '類型(0:省、直轄市,1:市,2:區/縣)', 7 `is_delete` int(11) DEFAULT '0' COMMENT '是否刪除', 8 `create_user` varchar(50) DEFAULT NULL, 9 `create_time` date DEFAULT NULL, 10 `update_user` varchar(50) DEFAULT NULL, 11 `update_time` date DEFAULT NULL, 12 `note` varchar(50) DEFAULT NULL, 13 PRIMARY KEY (`id`), 14 KEY `index_type` (`type`), 15 KEY `fk_area_parent` (`fk_parent_id`), 16 KEY `fk_area_enum_const_active` (`flag_active`), 17 CONSTRAINT `fk_area_enum_const_active` FOREIGN KEY (`flag_active`) REFERENCES `enum_const` (`ID`), 18 CONSTRAINT `fk_area_parent` FOREIGN KEY (`fk_parent_id`) REFERENCES `bxqk_pe_area` (`id`) 19 ) ENGINE=InnoDB AUTO_INCREMENT=7017 DEFAULT CHARSET=utf8 COMMENT='地區表';

?

思路:兩種
先說好的一種(不管是效率還是擴展性都是更好)?

直接上 代碼:數據結構說明在代碼后面

1 /** 2 * 省市縣級json數據 3 * 4 * @return 5 */ 6 @LogAndNotice("省市縣級json數據") 7 public List<Map<String, Object>> listArea() { 8 List<Map<String, Object>> areas = (List<Map<String, Object>>) redisCacheService. 9 getFromCache(BxqkTeachingConstant.CACHE_KEY_AREAS); 10 if (CollectionUtils.isEmpty(areas)) { 11 areas = this.listAreasFromDataBase(new ArrayList<>()); 12 redisCacheService.putToCache(BxqkTeachingConstant.CACHE_KEY_AREAS, areas); 13 } 14 15 return areas; 16 } 17 18 /** 19 * 獲取地址信息數據 20 * 21 * @param areas 22 * @return 23 */ 24 @LogAndNotice("獲取地址信息數據") 25 private List<Map<String, Object>> listAreasFromDataBase(List<Map<String, Object>> areas) { 26 List<Map<String, Object>> allList = this.myGeneralDao. 27 getMapBySQL(" SELECT id, CONCAT(id, ',', type) value, name label, fk_parent_id parent " + 28 " FROM bxqk_pe_area ORDER BY type, CONVERT (NAME USING gbk) ASC "); 29 if (CollectionUtils.isEmpty(allList)) { 30 throw new ParameterIllegalException(); 31 } 32 Map<String, Object> areaMap = new HashMap<>(16); 33 allList.forEach(e -> { 34 String key = String.valueOf(e.get(BxqkTeachingConstant.ADDRESS_ID)); 35 String parentKey = String.valueOf(e.get(BxqkTeachingConstant.ADDRESS_PARENT)); 36 if (areaMap.containsKey(parentKey)) { 37 Map<String, Object> value = (Map<String, Object>) areaMap.get(parentKey); 38 value.putIfAbsent(BxqkTeachingConstant.ADDRESS_CHILDREN, new ArrayList<>()); 39 ((List<Map<String, Object>>)value.get(BxqkTeachingConstant.ADDRESS_CHILDREN)).add(e); 40 areaMap.put(key, e); 41 } else { 42 areaMap.put(key, e); 43 areas.add(e); 44 } 45 }); 46 47 return areas; 48 } 1 上述方法中的常量 2 BxqkTeachingConstant.java: 3 4 private String BxqkTeachingConstant.ADDRESS_ID = "id"; 5 private String ADDRESS_PARENT = "parent"; 6 private String ADDRESS_CHILDREN = "children"; 7 private String CACHE_KEY_AREAS = "areas";

完事。數據——>

?

設計數據結構:

1 數據結構: 2 List<Map<String, Object>> allList 數據庫查出的所有數據 3 List<Map<String, Object>> areas 最終json數據 4 Map<String, Object> areaMap 遍歷時存放維持子父間關系的臨時map 5 6 數據結構關系如下(看懂的看,看不懂直接看代碼)——> 不會畫動圖 =-= 7 8 allList: 9 id fk_parent_id 10 1 null 11 2 null 12 3 1 13 4 1 14 5 3 15 6 5 16 17 維持關系的areaMap 18 map<area> areaMap: {key:id , value:map} 19 new Map{1, childrens} 20 new Map{3, childrens} 21 new Map{5, childrens} 22 new Map{4, childrens} 23 new Map{2, childrens} 24 new Map{3, childrens} 25 new Map{5, childrens} 26 27 new Map{4, childrens} 28 new Map{5, childrens} 29 30 結果集: 31 list<map> areas 32 new Map{1, childrens} 33 new Map{3, childrens} 34 new Map{5, childrens} 35 new Map{4, childrens} 36 new Map{2, childrens}

?

******************************************************************************************************************************************

第二種:(第一種看懂的這個直接pass掉!)

普通方法,現根據類型用3個集合分別存儲省市縣的信息,對3個list根據外鍵 fk_parent_id 父子關系遍歷即可

代碼簡單,常量字符串不再列出

1 /** 2 * 省市縣級聯json數據 3 * 4 * @return 5 */ 6 @LogAndNotice("省市縣級聯json數據") 7 public List<Map<String, Object>> listArea() { 8 List<Map<String, Object>> resultFromCache = (List<Map<String, Object>>) redisCacheService. 9 getFromCache(BxqkTeachingConstant.PARAM_CACHE_PROVINCES); 10 if (CollectionUtils.isNotEmpty(resultFromCache)) { 11 return resultFromCache; 12 } 13 List<Map<String, Object>> result = new ArrayList<>(); 14 List<Map<String, Object>> allList = this.myGeneralDao.getMapBySQL( 15 " SELECT id value, name label, fk_parent_id parent, type FROM bxqk_pe_area " + 16 " ORDER BY CONVERT (NAME USING gbk) ASC "); 17 if (CollectionUtils.isNotEmpty(allList)) { 18 List<Map<String, Object>> provinceList = new ArrayList(); 19 List<Map<String, Object>> cityList = new ArrayList(); 20 List<Map<String, Object>> countyList = new ArrayList(); 21 allList.forEach(e -> { 22 Map<String, Object> map = new HashMap<>(16); 23 if (String.valueOf(e.get(BxqkTeachingConstant.PARAM_ADDRESS_TYPE)) 24 .equals(BxqkTeachingConstant.PARAM_PROVINCE_TYPE_CODE)) { 25 provinceList.add(e); 26 } else if (String.valueOf(e.get(BxqkTeachingConstant.PARAM_ADDRESS_TYPE)) 27 .equals(BxqkTeachingConstant.PARAM_CITY_TYPE_CODE)) { 28 cityList.add(e); 29 } else if (String.valueOf(e.get(BxqkTeachingConstant.PARAM_ADDRESS_TYPE)) 30 .equals(BxqkTeachingConstant.PARAM_COUNTY_TYPE_CODE)) { 31 countyList.add(e); 32 } 33 }); 34 provinceList.forEach(e ->{ 35 Map<String, Object> provinceMap = new LinkedHashMap<>(); 36 provinceMap.put(BxqkTeachingConstant.PARAM_ADDRESS_VALUE, 37 e.get(BxqkTeachingConstant.PARAM_ADDRESS_VALUE) + "," + e.get(BxqkTeachingConstant.PARAM_ADDRESS_TYPE)); 38 provinceMap.put(BxqkTeachingConstant.PARAM_ADDRESS_LABEL, e.get(BxqkTeachingConstant.PARAM_ADDRESS_LABEL)); 39 40 List<Map<String, Object>> secondList = new ArrayList<>(); 41 cityList.forEach(c -> { 42 if (String.valueOf(e.get(BxqkTeachingConstant.PARAM_ADDRESS_VALUE)). 43 equals(String.valueOf(c.get(BxqkTeachingConstant.PARAM_ADDRESS_PARENT)))) { 44 Map<String, Object> cityMap = new LinkedHashMap<>(); 45 cityMap.put(BxqkTeachingConstant.PARAM_ADDRESS_VALUE, 46 c.get(BxqkTeachingConstant.PARAM_ADDRESS_VALUE) + "," + c.get(BxqkTeachingConstant.PARAM_ADDRESS_TYPE)); 47 cityMap.put(BxqkTeachingConstant.PARAM_ADDRESS_LABEL, c.get(BxqkTeachingConstant.PARAM_ADDRESS_LABEL)); 48 49 List<Map<String, Object>> levelThreeList = new ArrayList<>(); 50 countyList.forEach(t -> { 51 Map<String, Object> levelThreeMap = new LinkedHashMap<>(); 52 if (String.valueOf(c.get(BxqkTeachingConstant.PARAM_ADDRESS_VALUE)). 53 equals(String.valueOf(t.get(BxqkTeachingConstant.PARAM_ADDRESS_PARENT)))) { 54 levelThreeMap.put(BxqkTeachingConstant.PARAM_ADDRESS_VALUE, 55 t.get(BxqkTeachingConstant.PARAM_ADDRESS_VALUE) + "," + t.get(BxqkTeachingConstant.PARAM_ADDRESS_TYPE)); 56 levelThreeMap.put(BxqkTeachingConstant.PARAM_ADDRESS_LABEL, t.get(BxqkTeachingConstant.PARAM_ADDRESS_LABEL)); 57 levelThreeList.add(levelThreeMap); 58 } 59 }); 60 if (CollectionUtils.isNotEmpty(levelThreeList)) { 61 cityMap.put(BxqkTeachingConstant.PARAM_ADDRESS_CHILDREN, levelThreeList); 62 } 63 secondList.add(cityMap); 64 } 65 }); 66 provinceMap.put(BxqkTeachingConstant.PARAM_ADDRESS_CHILDREN, secondList); 67 result.add(provinceMap); 68 }); 69 redisCacheService.putToCache(BxqkTeachingConstant.PARAM_CACHE_PROVINCES, result); 70 return result; 71 } else { 72 throw new ParameterIllegalException(CommonConstant.PARAM_ERROR); 73 } 74 }

完事,記得都要放緩存呦→

?

記錄點滴生活...

轉載于:https://www.cnblogs.com/shuaishuai1993/p/9275041.html

總結

以上是生活随笔為你收集整理的java 数据库中获取省市级json数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美女黄站| 在线播放无码后入内射少妇 | www.99re. | 日本涩涩网站 | 韩日av片| 人人澡人人澡人人澡 | 狠狠干五月 | 久久久午夜影院 | 午夜精| 成人91网站 | 人人爽av| 欧美人与性动交ccoo | 99久久精品免费看 | 三级黄片毛片 | 亚洲激情午夜 | 黄色国产精品 | 欧美一区视频在线 | 色多多污 | 豆国产97在线 | 亚洲 | 一本一道久久a久久精品蜜桃 | 日本理论片 | 黄色av高清| 国产三级中文字幕 | 日韩视频一区在线 | 黄色网页在线 | 亚洲福利视频导航 | 亚洲欧洲无码一区二区三区 | 国产亚洲网站 | 色综合久久久久久 | 午夜影院免费视频 | 蜜臀一区二区三区 | 一级黄色伦理片 | 成人性生交免费看 | 国产激情免费视频 | 亚洲情趣 | 成人av无码一区二区三区 | 亚洲av无码久久忘忧草 | 成人特级毛片69免费观看 | 风流少妇按摩来高潮 | 伊在线久久丫 | 色视频网| 国产精品入口a级 | 免费在线观看黄网 | 99自拍视频 | 日本真人做爰免费视频120秒 | h在线| 天堂av在线电影 | 亚洲天堂av一区二区 | 精品三级av | 国产做爰高潮呻吟视频 | 婷婷久久久久久 | 一区二区三区伦理 | 国产亚洲女人久久久久毛片 | 黄色大片毛片 | 五月天久久久久 | 成人午夜免费在线 | 亚州av影院| 欧美一卡二卡 | 欧美变态网站 | 欧美日本一二三区 | 亚洲精品免费观看 | 一区二区日韩国产 | 人人插人人干 | 中文在线免费 | 国产黑丝精品 | 青青草在线免费观看 | 成人激情在线 | 精品亚洲精品 | 国产毛片毛片毛片毛片 | 探花视频在线版播放免费观看 | 国产网站入口 | 51嘿嘿嘿国产精品伦理 | 亚色视频在线 | 无码av免费毛片一区二区 | 欧美黑人疯狂性受xxxxx野外 | 日韩欧美视频免费观看 | 久久久免费高清视频 | 男男做的视频 | 成年人免费大片 | 人人搞人人 | 先锋av在线资源 | www.色妞| 日韩a级片在线观看 | 爆乳熟妇一区二区三区霸乳 | 日本美女黄色 | 亚洲精品丝袜 | 亲嘴扒胸摸屁股激烈网站 | 色哟哟网站入口 | 九九激情网 | 欧美性猛交xxxx乱大交3 | 京香julia在线观看 | 免费一区二区三区四区 | 欧美日韩首页 | 中文字幕日韩人妻在线视频 | 久久偷看各类wc女厕嘘嘘偷窃 | 亚洲精品久久久久久久久 | 欧美日韩伦理片 | av中文字幕第一页 | 亚洲666|