1.声明
当前内容用于本人学习,以及笔记之用,主要解决TreeNode这个问题,例如菜单节点
2.分析类似菜单的实现
1.分析例如菜单的需求
分析这个需求并实现这个类的数据结构
分析查询的sql
3.创建该数据结构TreeNode
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class TreeNode {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String name;
private Integer parentNodeId;
private List<TreeNode> childNodes;
}
4.创建TreeNodeMapper和映射xml文件
public interface TreeNodeMapper {
List<TreeNode> findAllTreeNode();
}
对应的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.hy.springboot.mybatisplus.rolepermiss.mapper.TreeNodeMapper">
<resultMap type="treeNode" id="tableTreeNode">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="parentNodeId" property="parentNodeId" />
<collection property="childNodes" select="findTreeNodesByParentNodeId" column="{pid=id}"></collection>
</resultMap>
<!-- select * from tree_node where parentNodeId is null SELECT * FROM tree_node
WHERE parentNodeId = 1 SELECT * FROM tree_node WHERE parentNodeId = 4 -->
<select id="findAllTreeNode" resultMap="tableTreeNode">
select * from tree_node
where parentNodeId is null
</select>
<select id="findTreeNodesByParentNodeId" resultMap="tableTreeNode">
select * from tree_node
where parentNodeId=#{pid}
</select>
</mapper>
这里注意的是,collection中使用select查询,返回的结果为resultMap为上面一个tableTreeNode
,由此可以实现递归的查询操作
5.创建controller并实现查询操作
@RestController
@RequestMapping("/treeNode")
public class TreeNodeController {
@Autowired
TreeNodeMapper treeNodeMapper;
@RequestMapping("/findAllTreeNode")
public ResponseEntity<?> findAllTreeNode() {
List<TreeNode> treeNode = treeNodeMapper.findAllTreeNode();
return ResponseEntity.ok(treeNode);
}
}
6.测试
结果操作成功!
7.总结
1.首先在实现某项功能的时候,需要先分析实现的功能,然后为该功能定义数据结构
(数据结构定义最为重要)
2.在实现该查询的时候需要分析该查询是否有规律,有规律可以按照特定的规律实现递归操作,collection中的select,并且select中返回本身resultMap
(就可以实现递归操作)
以上纯属个人见解,如有问题请联系本人!