91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot+mybatis plus怎么實現樹形結構查詢

發布時間:2021-07-21 20:39:32 來源:億速云 閱讀:910 作者:chen 欄目:開發技術

本篇內容介紹了“springboot+mybatis plus怎么實現樹形結構查詢”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

目錄
  • 背景

  • 使用場景

  • 設計思路

    • 遞歸模型

  • 實現代碼

    • 注意事項

      • 總結

        背景

        實際開發過程中經常需要查詢節點樹,根據指定節點獲取子節點列表,以下記錄了獲取節點樹的操作,以備不時之需。

        使用場景

        可以用于系統部門組織機構、商品分類、城市關系等帶有層級關系的數據結構;

        設計思路

        遞歸模型

        即根節點、枝干節點、葉子節點,數據模型如下:

        idcodenameparent_code
        110000電腦0
        220000手機0
        310001聯想筆記本10000
        410002惠普筆記本10000
        51000101聯想拯救者10001
        61000102聯想小新系列10001

        實現代碼

        表結構

        CREATE TABLE `tree_table` (
          `id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
          `code` varchar(10) NOT NULL COMMENT '編碼',
          `name` varchar(20) NOT NULL COMMENT '名稱',
          `parent_code` varchar(10)  NOT NULL COMMENT '父級編碼',
          PRIMARY KEY (`id`) USING BTREE
        ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='樹形結構測試表';

        表數據

        INSERT INTO `tree_table`(`code`, `name`, `parent_code`) VALUES ('10000', '電腦', '0');
        INSERT INTO `tree_table`(`code`, `name`, `parent_code`) VALUES ('10001', '聯想筆記本', '10000');
        INSERT INTO `tree_table`(`code`, `name`, `parent_code`) VALUES ('10002', '惠普筆記本', '10000');
        INSERT INTO `tree_table`(`code`, `name`, `parent_code`) VALUES ('1000101', '聯想拯救者', '10001');
        INSERT INTO `tree_table`(`code`, `name`, `parent_code`) VALUES ('1000102', '聯想小新系列', '10001');

        實體

        @Data
        @TableName("tree_table")
        @EqualsAndHashCode(callSuper = false)
        @Accessors(chain = true)
        public class TreeTable {
        
            /**
             * 主鍵ID
             */
            @TableId(type = IdType.AUTO)
            private Integer id;
            /**
             * 編碼
             */
            private String code;
            /**
             * 名稱
             */
            private String name;
            /**
             * 父級編碼
             */
            private String parentCode;
        
            /**
             * 子節點
             */
            @TableField(exist = false)
            private List<TreeTable> childNode;
        }

        mybatis

        mapper

        public interface TreeTableMapper extends BaseMapper<TreeTable> {
            /**
             * 獲取樹形結構數據
             *
             * @return 樹形結構
             */
            public List<TreeTable> noteTree();
        }

        xml

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        <mapper namespace="com.springboot.example.mysqltree.mapper.TreeTableMapper">
            <resultMap id="BaseResultMap" type="com.springboot.example.mysqltree.model.entity.TreeTable">
                <result column="id" property="id"/>
                <result column="code" property="code"/>
                <result column="name" property="name"/>
                <result column="parent_code" property="parentCode"/>
            </resultMap>
            <resultMap id="NodeTreeResult" type="com.springboot.example.mysqltree.model.entity.TreeTable"
                       extends="BaseResultMap">
                <collection property="childNode" column="code" ofType="com.springboot.example.mysqltree.model.entity.TreeTable"
                            javaType="java.util.ArrayList" select="nextNoteTree">
        
                </collection>
            </resultMap>
        
            <sql id="Base_Column_List">
                        id,
                        code,
                        `name`,
                        parent_code
            </sql>
           
            <select id="nextNoteTree" resultMap="NodeTreeResult">
                select
                <include refid="Base_Column_List"/>
                from tree_table
                where parent_code=#[code]
            </select>
            <select id="noteTree" resultMap="NodeTreeResult">
                select
                <include refid="Base_Column_List"/>
                from tree_table
                where parent_code='0'
            </select>
        </mapper>
        • noteTree :獲取所有父級節點數據;

        • nextNoteTree:循環獲取子節點數據,知道葉子節點結束;

        • column:關聯表的列名;

        • ofType:返回類型

        啟動類

        @Slf4j
        @Component
        public class TreeTableCommandLineRunner implements CommandLineRunner {
            @Resource
            private TreeTableMapper treeTableMapper;
        
            @Override
            public void run(String... args) throws Exception {
                log.info(JSONUtil.toJsonPrettyStr(treeTableMapper.noteTree()));
            }
        }

        最終效果

        [
            {
                "code": "10000",
                "childNode": [
                    {
                        "code": "10001",
                        "childNode": [
                            {
                                "code": "1000101",
                                "childNode": [
                                ],
                                "parentCode": "10001",
                                "name": "聯想拯救者",
                                "id": 5
                            },
                            {
                                "code": "1000102",
                                "childNode": [
                                ],
                                "parentCode": "10001",
                                "name": "聯想小新系列",
                                "id": 6
                            }
                        ],
                        "parentCode": "10000",
                        "name": "聯想筆記本",
                        "id": 3
                    },
                    {
                        "code": "10002",
                        "childNode": [
                        ],
                        "parentCode": "10000",
                        "name": "惠普筆記本",
                        "id": 4
                    }
                ],
                "parentCode": "0",
                "name": "電腦",
                "id": 1
            }
        ]

        注意事項

        使用mybatis時如加載不到mapper xml需在pom.xml添加以下配置:

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>

        總結

        使用遞歸方式是比較常見的方式,優點是實現簡單,直觀的體現層級關系,但是數據量大的情況下效率會略低;歡迎使用其他方式的小伙伴分享自己的實現思路。

        “springboot+mybatis plus怎么實現樹形結構查詢”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

        向AI問一下細節

        免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

        AI

        会泽县| 中西区| 嘉义县| 益阳市| 原平市| 关岭| 富顺县| 湘乡市| 望奎县| 梅河口市| 榆树市| 西昌市| 电白县| 潍坊市| 东乌珠穆沁旗| 合川市| 尚义县| 通山县| 攀枝花市| 山阴县| 宣恩县| 商水县| 沙坪坝区| 资中县| 清水县| 禄丰县| 红桥区| 河西区| 平罗县| 墨竹工卡县| 古浪县| 昂仁县| 咸宁市| 高州市| 建平县| 永胜县| 资溪县| 洛川县| 东阳市| 晴隆县| 霍林郭勒市|