数据库存储数据的格式
id | categoryName | parentid |
---|
1 | 家电 | 0 |
2 | 电视 | 1 |
3 | 洗衣机 | 1 |
实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@TableName(value = "code_enroll_category")
public class CodeEnrollCategory {
@TableId(value = "id" ,type = IdType.AUTO)
private Integer id;
@TableField(value = "categoryName")
private String categoryName;
@TableField(value = "parentId")
private Integer parentId;
}
mapper映射文件
<resultMap id="BaseResultMap" type="codeEnrollCategory">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="categoryName" jdbcType="VARCHAR" property="categoryName" />
<result column="parentId" jdbcType="INTEGER" property="parentId" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, categoryName, parentId
</sql>
<select id="getTreeList" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from `code_enroll_category`
where state =1
</select>
dao源码
List<CodeEnrollCategory> getTreeList();
serviceImpl层
/**
*
* @return
*/
@Override
public List<Map<String, Object>> getTreeList() {
List<CodeEnrollCategory> list = baseMapper.getTreeList();
List<Map<String, Object>> result = new ArrayList<>();
List<CodeEnrollCategory> collect = list.stream()
.filter(codeEnrollCategory -> codeEnrollCategory.getParentId() == 0)
.collect(Collectors.toList());
return getTree( list , result,collect); //第一种类型获取树状菜单
return getList( list , result,collect); //第二种类型将父子节点转化同级别集合
}
/**
* 查找下级菜单
* 将实体类格式转换成tree指定的数据格式
* @param list
* @param result
* @return
*/
private List<Map<String, Object>> getTree(List<CodeEnrollCategory> list ,List<Map<String, Object>> result,List<CodeEnrollCategory> collect){
for (CodeEnrollCategory category : collect){
Map<String, Object> map = new HashMap<>();
map.put("id", category.getId());
map.put("title", category.getCategoryName());
map.put("spread",false);
List<CodeEnrollCategory> collect1 = list.stream()
.filter(cate -> cate.getParentId().equals(category.getId()))
.collect(Collectors.toList());
List<Map<String, Object>> result1 = new ArrayList<>();
map.put("children", getTree(list, result1,collect1));
result.add(map);
}
return result;
}
/**
* 查找下级菜单
* 将父子节点转化同级别集合List
* @param list
* @param result
* @return
*/
private List<Map<String, Object>> getList(List<CodeEnrollCategory> list ,List<Map<String, Object>> result,List<CodeEnrollCategory> collect){
for (CodeEnrollCategory category : collect){
Map<String, Object> map = new HashMap<>();
map.put("id", category.getId());
map.put("title", category.getCategoryName());
map.put("spread",false);
result.add(map);
List<CodeEnrollCategory> collect1 = list.stream()
.filter(cate -> cate.getParentId().equals(category.getId()))
.collect(Collectors.toList());
getList(list, result,collect1);
}
return result;
}
service 接口
List<Map<String,Object>> getTreeList();
controller 接口
/**
*获取树形菜单
*/
@RequestMapping("/getTreeList")
public R getTreeList(){
List<Map<String, Object>> list= null;
if(redisUtils.existsKey(TREELIST)){
String s = redisUtils.get(TREELIST);
list= new Gson().fromJson(s, new TypeToken<List<Map<String, Object>>>() {
}.getType());
}else {
list = codeEnrollCategoryService.getTreeList();
redisUtils.set(TREELIST,list);
}
Map<String, Object> map = new HashMap<>();
map.put("list",list);
return R.ok(map);
}
前端页面
<div id="test1"></div>
<script>
layui.use('tree', function(){
var tree = layui.tree;
ajaxLoad('/zz/acc/accept/getTreeList',{
token: window.localStorage.getItem('token'),
},function (res) {
var inst1 = tree.render({
elem: '#test1' //绑定元素
, data: res.list
});
});
});
</script>