• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

当Mybatis遇上目录树超全完美解决方案

mybatis 搞代码 4年前 (2022-01-09) 13次浏览 已收录 0个评论
文章目录[隐藏]

相信你也遇到过这种场景,判断二级目录属于哪个一级目录,一个员工属于哪个上级员工领导…

Mybatis遇上目录树,有哪些解决方法?

一般来说,有xml直接实现和java代码递归赋值实现。

方式一:xml直接实现

这里列出category数据表数据

表结构如下

这里贴出需要返回给前端的聚合模型view object数据

/**
 * 二级分类VO
 */
public class CategoryVO {
    private Integer id;
    private String name;
    private String type;
    private Integer fatherId;
    // 三级分类vo list
    private List<SubCategoryVO> subCatList;
	//=====篇幅原因,省掉Getter和Setter方法======
	......
}
public class SubCategoryVO {
    private Integer subId;
    private String subName;
    private String subType;
    private Integer subFatherId;
    //=====篇幅原因,省掉Getter和Setter方法======
	......
}

这就涉及到自连接查询子目录的技巧了,我们试试查找father_id1的子分类数据,也就是查询甜点/蛋糕分类下面的二级和三级分类,执行如下语句

SELECT
	f.id AS id,
	f.`name` AS `name`,
	f.type AS type,
	f.father_id AS fatherId,
	c.id AS subId,
	c.`name` AS subName,
	c.type AS subType,
	c.father_id AS subFatherId 
FROM
	category f
	LEFT JOIN category c ON f.id = c.father_id 
WHERE
	f.father_id = 1

结果如下

可以看到二级分类为蛋糕、点心时,有哪些对应的三级分类可以提供给前端,便于展示。

  我这里分为CategoryVOSubCategoryVO ,而不是把所有属性放在一个VO,是为了便于理解。如果不用

本文来源gaodai^.ma#com搞#代!码网

List集合,而把所有属性放在一个VO,前端收到的数据形式和你此时在数据库查询出来的一样,有多条蛋糕记录,底下对应着不同具体食品,这让前端不好处理也不符合逻辑,正常逻辑应该是只有一个蛋糕分类,然后这个分类里面有数组去装着蛋糕对应子分类才对。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:当Mybatis遇上目录树超全完美解决方案

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址