国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

springboot+mybatis plus實(shí)現(xiàn)樹形結(jié)構(gòu)查詢

瀏覽:115日期:2023-02-24 10:29:50
目錄背景使用場景設(shè)計(jì)思路遞歸模型實(shí)現(xiàn)代碼注意事項(xiàng)總結(jié)背景

實(shí)際開發(fā)過程中經(jīng)常需要查詢節(jié)點(diǎn)樹,根據(jù)指定節(jié)點(diǎn)獲取子節(jié)點(diǎn)列表,以下記錄了獲取節(jié)點(diǎn)樹的操作,以備不時(shí)之需。

使用場景

可以用于系統(tǒng)部門組織機(jī)構(gòu)、商品分類、城市關(guān)系等帶有層級(jí)關(guān)系的數(shù)據(jù)結(jié)構(gòu);

設(shè)計(jì)思路遞歸模型

即根節(jié)點(diǎn)、枝干節(jié)點(diǎn)、葉子節(jié)點(diǎn),數(shù)據(jù)模型如下:

id code name parent_code 1 10000 電腦 0 2 20000 手機(jī) 0 3 10001 聯(lián)想筆記本 10000 4 10002 惠普筆記本 10000 5 1000101 聯(lián)想拯救者 10001 6 1000102 聯(lián)想小新系列 10001

實(shí)現(xiàn)代碼

表結(jié)構(gòu)

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 ’父級(jí)編碼’, PRIMARY KEY (`id`) USING BTREE) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT=’樹形結(jié)構(gòu)測試表’;

表數(shù)據(jù)

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

實(shí)體

@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; /** * 父級(jí)編碼 */ private String parentCode;​ /** * 子節(jié)點(diǎn) */ @TableField(exist = false) private List<TreeTable> childNode;}

mybatis

mapper

public interface TreeTableMapper extends BaseMapper<TreeTable> { /** * 獲取樹形結(jié)構(gòu)數(shù)據(jù) * * @return 樹形結(jié)構(gòu) */ 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 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 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 resultMap='NodeTreeResult'>select<include refid='Base_Column_List'/>from tree_tablewhere parent_code=#[code] </select> <select resultMap='NodeTreeResult'>select<include refid='Base_Column_List'/>from tree_tablewhere parent_code=’0’ </select></mapper> noteTree :獲取所有父級(jí)節(jié)點(diǎn)數(shù)據(jù); nextNoteTree:循環(huán)獲取子節(jié)點(diǎn)數(shù)據(jù),知道葉子節(jié)點(diǎn)結(jié)束; column:關(guān)聯(lián)表的列名; ofType:返回類型

啟動(dòng)類

@Slf4j@Componentpublic 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': '聯(lián)想拯救者','id': 5 }, {'code': '1000102','childNode': [],'parentCode': '10001','name': '聯(lián)想小新系列','id': 6 }],'parentCode': '10000','name': '聯(lián)想筆記本','id': 3 }, {'code': '10002','childNode': [],'parentCode': '10000','name': '惠普筆記本','id': 4 }],'parentCode': '0','name': '電腦','id': 1 }]注意事項(xiàng)

使用mybatis時(shí)如加載不到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>總結(jié)

使用遞歸方式是比較常見的方式,優(yōu)點(diǎn)是實(shí)現(xiàn)簡單,直觀的體現(xiàn)層級(jí)關(guān)系,但是數(shù)據(jù)量大的情況下效率會(huì)略低;歡迎使用其他方式的小伙伴分享自己的實(shí)現(xiàn)思路。

到此這篇關(guān)于springboot+mybatis plus實(shí)現(xiàn)樹形結(jié)構(gòu)查詢的文章就介紹到這了,更多相關(guān)springboot 樹形結(jié)構(gòu)查詢內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 蒲江县| 申扎县| 顺义区| 雷山县| 谷城县| 翼城县| 新沂市| 福海县| 阿图什市| 通州市| 长治县| 社旗县| 萨迦县| 贵溪市| 安阳市| 屏东市| 宁陕县| 科技| 黄龙县| 临武县| 南岸区| 扎鲁特旗| 忻城县| 广水市| 黔西| 赤壁市| 金溪县| 弥渡县| 辽源市| 西平县| 宁强县| 兴安县| 怀仁县| 固阳县| 塘沽区| 英德市| 凤冈县| 郧西县| 安溪县| 平泉县| 易门县|