In the actual development process, it is often necessary to query the node tree and obtain the child node list based on the specified node. The operation of obtaining the node tree is recorded below, in case of emergency.
Can be used for data structures with hierarchical relationships such as system department organizations, product classifications, city relationships, etc.;
That is, root node, branch node, leaf node, the data model is as follows:
id | code | name | parent_code |
---|---|---|---|
10000 | PC | 0 | |
20000 | 手机 | 0 | |
10001 | Lenovo Notebook | 10000 | |
10002 | HP Notebook | 10000 | |
##1000101 | Lenovo Savior | 10001 | |
1000102 | Lenovo Xiaoxin Series | 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; }
mapper
public interface TreeTableMapper extends BaseMapper<TreeTable> { /** * 获取树形结构数据 * * @return 树形结构 */ public List<TreeTable> noteTree(); }
<?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>
@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 } ]
<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources>
The above is the detailed content of How to use springboot+mybatis plus to implement tree structure query. For more information, please follow other related articles on the PHP Chinese website!