最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis樹形結(jié)構(gòu)查詢的實現(xiàn)示例

 更新時間:2025年11月28日 10:24:03   作者:風樹種子  
本文介紹了一種使用MyBatis進行樹形結(jié)構(gòu)查詢的方法,通過構(gòu)造臨時表和內(nèi)連接,實現(xiàn)了不同層級數(shù)據(jù)的一次性查詢及映射,感興趣的可以了解一下

前言

對于樹形結(jié)構(gòu)的數(shù)據(jù)庫設計通常是基于繼承關系設計的,也就是通過父ID關聯(lián)來實現(xiàn)的,還有就是基于左右值編碼設計。本文以繼承關系設計的樹形結(jié)構(gòu)來討論下MyBatis樹形結(jié)構(gòu)查詢。以深度為二的樹為例,要將這種結(jié)構(gòu)的數(shù)據(jù)查詢出來,通常的做法是先查詢一級數(shù)據(jù),再查詢二級數(shù)據(jù),然后在程序里組裝起來,想了下,其實還可以更簡單,不用分開兩次,就能將不同級別數(shù)據(jù)一次性查詢映射出來。

1.數(shù)據(jù)準備

以區(qū)域表為例,數(shù)據(jù)如下

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for area
-- ----------------------------
DROP TABLE IF EXISTS `area`;
CREATE TABLE `area` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'PK',
  `area_name` varchar(50) NOT NULL COMMENT '地區(qū)名稱',
  `parent_id` int(11) NOT NULL COMMENT '父Id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7668 DEFAULT CHARSET=utf8 COMMENT='地區(qū)表';

-- ----------------------------
-- Records of area
-- ----------------------------
INSERT INTO `area` VALUES ('1', '廣東省', '0');
INSERT INTO `area` VALUES ('2', '深圳市', '1');
INSERT INTO `area` VALUES ('3', '廣州市', '1');
INSERT INTO `area` VALUES ('4', '湖南省', '0');
INSERT INTO `area` VALUES ('5', '長沙市', '4');
INSERT INTO `area` VALUES ('6', '株洲市', '4');

2.實體類

public class Area {
    private Integer id;

    private String areaName;

    private Integer parentId;

    List<Area> children;

   //getter setter
}

3.查詢sql

SELECT
        t_top.id AS id1,
        t_top.area_name AS area_name1,
        t_top.parent_id AS parent_id1,
        t_second.id AS id2,
        t_second.area_name AS area_name2,
        t_second.parent_id AS parent_id2
    FROM
        (
            SELECT
                id,
                area_name,
                parent_id
            FROM
                area
            WHERE
                parent_id = 0
        ) AS t_top
    INNER JOIN (
        SELECT
            id,
            area_name,
            parent_id
        FROM
            area
        WHERE
            parent_id IN (
                SELECT
                    id
                FROM
                    area
                WHERE
                    parent_id = 0
            )
    ) AS t_second ON t_top.id = t_second.parent_id

基本思路就是將一級區(qū)域查詢出來作為臨時表t_top,將二級區(qū)域查詢出來作為臨時表t_second,然后將兩張表做inner join操作,查詢結(jié)果:

4.ResultMap映射

  <resultMap id="TreeResultMap" type="com.domain.Area" >
    <id column="id1" property="id" jdbcType="INTEGER" />
    <result column="area_name1" property="areaName" jdbcType="VARCHAR" />
    <result column="parent_id1" property="parentId" jdbcType="INTEGER" />
    <collection property="children" ofType="com.domain.Area">
      <id column="id2" property="id" jdbcType="INTEGER" />
      <result column="area_name2" property="areaName" jdbcType="VARCHAR" />
      <result column="parent_id2" property="parentId" jdbcType="INTEGER" />
    </collection>
  </resultMap>

單元測試結(jié)果:

到此這篇關于MyBatis樹形結(jié)構(gòu)查詢的實現(xiàn)示例的文章就介紹到這了,更多相關MyBatis樹形結(jié)構(gòu)查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • IntelliJ?IDEA安裝與基礎配置指南

    IntelliJ?IDEA安裝與基礎配置指南

    IntelliJ?IDEA是一款由JetBrains公司開發(fā)的Java集成開發(fā)環(huán)境,支持Java、Kotlin、Groovy、Scala等多種編程語言,IntelliJ?IDEA作為一款強大的開發(fā)工具,被廣泛應用于Java開發(fā)、Web開發(fā)、Android開發(fā)等領域,本文給大家介紹了IntelliJ?IDEA安裝與基礎配置
    2025-07-07
  • 解決Idea的選擇文件后定位瞄準器"Select Opened File"的功能不見了

    解決Idea的選擇文件后定位瞄準器"Select Opened File"的功能

    使用IntelliJ IDEA時,可能會發(fā)現(xiàn)"SelectOpenedFile"功能不見了,這個功能允許用戶快速定位到當前打開文件的位置,若要找回此功能,只需在IDEA的標題欄上右鍵,然后選擇"Always Select Opened File",這樣就可以重新啟用這個便捷的功能
    2024-11-11
  • Java11新特性之HttpClient小試牛刀

    Java11新特性之HttpClient小試牛刀

    本文主要研究一下Java11的HttpClient的基本使用。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Java8實現(xiàn)Stream流的合并的方法展示

    Java8實現(xiàn)Stream流的合并的方法展示

    本文介紹了Java8中Stream流的合并方法,包括concat()、flatMap()和reduce()三種方法。其中,concat()方法可以將兩個Stream流合并成一個,flatMap()方法可以將一個Stream流中的元素映射成多個Stream流并合并成一個,reduce()方法可以將Stream流中的元素逐個合并成一個結(jié)果
    2023-05-05
  • Java網(wǎng)絡編程基礎教程之Socket入門實例

    Java網(wǎng)絡編程基礎教程之Socket入門實例

    這篇文章主要介紹了Java網(wǎng)絡編程基礎教程之Socket入門實例,本文講解了創(chuàng)建Socket、Socket發(fā)送數(shù)據(jù)、Socket讀取數(shù)據(jù)、關閉Socket等內(nèi)容,都是最基礎的知識點,需要的朋友可以參考下
    2014-09-09
  • Java把多個對象的list的數(shù)據(jù)合并的方法示例

    Java把多個對象的list的數(shù)據(jù)合并的方法示例

    在Java中合并多個List可以使用遍歷、Stream API或Apache Commons Collections,通過遍歷各個List并將元素添加到新List實現(xiàn)合并,Java 8提供了Stream API,使用Stream.of()和flatMap()可以簡潔地合并List,文中給出了多種方法示例,需要的朋友可以參考下
    2024-09-09
  • Springboot中登錄后關于cookie和session攔截問題的案例分析

    Springboot中登錄后關于cookie和session攔截問題的案例分析

    這篇文章主要介紹了Springboot中登錄后關于cookie和session攔截案例,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java圖片處理的簡易指南

    Java圖片處理的簡易指南

    圖像處理是各類應用程序的重要組成部分,Java作為一種多功能且強大的編程語言,提供了豐富的庫和框架來高效地處理圖像處理任務,本文將帶您了解Java圖像處理的基本概念、工具以及實踐示例,幫助您掌握Java圖像處理技術(shù),需要的朋友可以參考下
    2024-09-09
  • Java單例模式簡單介紹

    Java單例模式簡單介紹

    這篇文章主要為大家詳細介紹了Java單例模式簡單的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Spring Boot 注解體系與工程實踐示例指南

    Spring Boot 注解體系與工程實踐示例指南

    本文詳細介紹了SpringBoot核心注解的語法、語義、適用場景及組合方式,涵蓋了自動配置、條件化注入、AOP與事務等關鍵領域,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2025-11-11

最新評論

澜沧| 当雄县| 库车县| 法库县| 西平县| 阿克| 常山县| 瓮安县| 隆昌县| 桑日县| 登封市| 荃湾区| 莱西市| 屯留县| 龙川县| 赞皇县| 酒泉市| 洛隆县| 麻阳| 黑龙江省| 宁安市| 商城县| 高青县| 高淳县| 康平县| 宿州市| 张家口市| 浦县| 哈尔滨市| 桐梓县| 内黄县| 阳城县| 泰州市| 沙洋县| 海晏县| 台前县| 黄陵县| 且末县| 朝阳区| 韩城市| 隆昌县|