SpringBoot、mybatis返回樹結(jié)構(gòu)的數(shù)據(jù)實現(xiàn)
公司有個業(yè)務(wù)需要查出所有的用戶權(quán)限分類,并將最后一層類別所包含的權(quán)限查出來。

數(shù)據(jù)庫說明,有一個parent_id 字段是最好的:、

parent_id的值就是上級的id,一般的話,最頂級的parent_id是設(shè)置為0。
先看看表結(jié)構(gòu):

下面不說廢話,直接上代碼:
定義的vo類:
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("父ID")
private Long parentId;
@ApiModelProperty("名稱")
private String name;
@ApiModelProperty("子節(jié)點")
private List<UserVo> children;獲取列表
List<UserVo> userList userService.findUsersAndChildrenList(User);
List<UserVo> users = new ArrayList<>();
for (UserVo r : userList) {
UserVo user = new UserVo();
user.setId(r.getId());
user.setParentId(r.getParentId());
user.setName(r.getName());
List<UserVo> children = this.getChildrenList(r.getId(), status);
user.setChildren(children);
users.add(user);
} public List<UserVo> getChildrenList(Long cid){
List<UserVo> users= userService.findUserChildrenByParentId(cid);
List<UserVo> userList= new ArrayList<>();
if(users){
for (UserVo u : users) {
UserVo user = new UserVo();
user.setId(u.getId());
user.setName(u.getName());
user.setParentId(u.getParentId());
List<UserVo > children = this.getChildrenList(u.getId());
user.setChildren(children);
userList.add(user);
}
}
return userList;
}mybatis查詢:
<select id="findUserChildrenList" resultMap="BaseResultMap">
SELECT *
FROM user
WHERE parent_id=#{id}
</select>最終的數(shù)據(jù)結(jié)構(gòu):
{
"message":'獲取成功',
"data":{
"num":1,
"pageSize":20,
"total":1,
"list":[
{
"id":6,
"name":"測試",
"parent_id":1,
"children":[
{
"id":9,
"name":"測試1",
"parent_id":6,
"children":[
{
"id":20,
"name":"測試2",
"parent_id":9,
"children":[
{
"id":21,
"name":"測試3",
"parent_id":20,
},
{
"id":22,
"name":"測試4",
"parent_id":20,
},
{
"id":23,
"name":"測試5",
"parent_id":20,
}
],
}
],
},
],
}
]
},
"code":200
}如果要查某個節(jié)點的所有父節(jié)點:
mybatis查詢改為 :
<select id="findUserParentListById" resultMap="BaseResultMap">
SELECT *
FROM user
WHERE id=#{id}
</select> public List<UserVo> getParentList(Long cid){
List<UserVo> users= userService.findUserParentListById(cid);
List<UserVo> userList= new ArrayList<>();
if(users){
for (UserVo u : users) {
UserVo user = new UserVo();
user.setId(u.getId());
user.setName(u.getName());
user.setParentId(u.getParentId());
List<UserVo > children = this.getParentList(u.getParentId());
user.setChildren(children);
userList.add(user);
}
}
return userList;
}到此這篇關(guān)于SpringBoot、mybatis返回樹結(jié)構(gòu)的數(shù)據(jù)實現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot、mybatis返回樹結(jié)構(gòu) 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java代碼獲取數(shù)據(jù)庫表里數(shù)據(jù)的總數(shù)操作
這篇文章主要介紹了java代碼獲取數(shù)據(jù)庫表里數(shù)據(jù)的總數(shù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
idea中MavenWeb項目不能創(chuàng)建Servlet的解決方案
這篇文章主要介紹了idea中MavenWeb項目不能創(chuàng)建Servlet的解決方案,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02

