介绍
首先就是由于是层级结构,想要展示出一对多多多的效果,不考虑多此查询,使用一次查询
SQL
SELECT a.id,a.`name`,b.id as bid,b.`name` as bname,c.id as cid,c.`name` as cname,d.id as did,d.`name` as dname,d.flag as dflag
FROM admin a
LEFT JOIN admin b
ON b.superior = a.id
LEFT JOIN admin c
ON c.superior = b.id
LEFT JOIN admin d
ON d.superior = c.id
WHERE a.`level` = 1;
查询效果
Mapper结构
Dao
List<HashMap<String,Object>> getAllOfficeConstruction();
mapper
<select id="getAllOfficeConstruction" resultMap="AllConstructionResultMap">
SELECT a.id,a.`name`,b.id as bid,b.`name` as bname,c.id as cid,c.`name` as cname,d.id as did,d.`name` as dname,d.flag as dflag
FROM admin a
LEFT JOIN admin b
ON b.superior = a.id
LEFT JOIN admin c
ON c.superior = b.id
LEFT JOIN admin d
ON d.superior = c.id
WHERE a.`level` = 1;
</select>
resultMap
<resultMap id="AllConstructionResultMap" type="java.util.HashMap">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<collection property="child" ofType="java.util.HashMap" javaType="list">
<id column="bid" jdbcType="INTEGER" property="id" />
<result column="bname" jdbcType="VARCHAR" property="name" />
<collection property="child" ofType="java.util.HashMap" javaType="list">
<id column="cid" jdbcType="INTEGER" property="id" />
<result column="cname" jdbcType="VARCHAR" property="name" />
<collection property="child" ofType="java.util.HashMap" javaType="list">
<id column="did" jdbcType="INTEGER" property="id" />
<result column="dname" jdbcType="VARCHAR" property="name" />
<result column="dflag" jdbcType="INTEGER" property="flag" />
</collection>
</collection>
</collection>
</resultMap>
最终效果
{
"code": 200,
"msg": "查询成功",
"data": {
"list": [
{
"name": "全域办",
"id": 15,
"child": [
{
"name": "乡",
"id": 33,
"child": [
{
"name": "村",
"id": 161,
"child": [
{
"flag": 2,
"name": "陶",
"id": 62
}
]
}
]
}
]
}
]
}
}