中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

發布時間:2022-04-02 16:26:50 來源:億速云 閱讀:854 作者:iii 欄目:大數據

這篇文章主要講解了“怎么用springboot+mybatis plus實現樹形結構查詢”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用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實現樹形結構查詢”的內容了,經過本文的學習后,相信大家對怎么用springboot+mybatis plus實現樹形結構查詢這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

大厂| 万源市| 巴里| 嘉峪关市| 疏勒县| 咸阳市| 报价| 绥江县| 鹤峰县| 民县| 麻阳| 慈利县| 肃宁县| 揭阳市| 博野县| 梓潼县| 磴口县| 丽江市| 西藏| 安达市| 晴隆县| 包头市| 长葛市| 洛浦县| 涞水县| 开鲁县| 会昌县| 舒城县| 建瓯市| 隆安县| 鱼台县| 毕节市| 叙永县| 闽侯县| 苏州市| 牡丹江市| 承德县| 英吉沙县| 措美县| 陆川县| 仙居县|