单表联查生成树状数据

pageHelper:

配置及简单原理

单表联查生成树结构

caategory表

-- auto-generated definition
create table category
(
    id       varchar(32) not null comment '主键'
        primary key,
    name     varchar(32) not null comment '分类名称',
    label    varchar(32) null comment '分类标签默认和名称一样',
    parentid varchar(32) null comment '父结点id',
    isshow   char        null comment '是否显示',
    orderby  int(4)      null comment '排序字段',
    isleaf   char        null comment '是否叶子'
);

前台所需的数据结构:

{
          id: 1,
          label: '一级 1',
          children: [{
            id: 4,
            label: '二级 1-1',
            children: [{
              id: 9,
              label: '三级 1-1-1'
            }, {
              id: 10,
              label: '三级 1-1-2'
            }]
          }]
        }, {
          id: 2,
          label: '一级 2',
          children: [{
            id: 5,
            label: '二级 2-1'
          }, {
            id: 6,
            label: '二级 2-2'
          }]
        },

结合实际考虑,需要采用左外链接,因为假如某个二级节点下没有子节点,采用内连接的话,这样的二级节点会丢失,看实际需要吧

查询方案:

封装类:

package com.xuecheng.framework.domain.course.ext;

import lombok.Data;
import lombok.ToString;

import java.util.List;

/**
 * Created by admin on 2018/2/7.
 */
@Data
@ToString
public class CategoryNode {
    String id;
    String label;
    List children;

}

持久层:CategoryMapper.xml




    
        
        
        
            
            
        
            
            
        
        
    
    

dao:

@Mapper
public interface TeachplanMapper {
    List findPlanTree(String courseId);
}

注意外连接时 on 和 where的区别

1、``on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left` `join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

select *
from teachplan p1
         left join teachplan p2
                   on p1.parentid = 0;//不管``on``中的条件是否为真,都会返回左边表中的记录。

你可能感兴趣的:(单表联查生成树状数据)