mybatis递归生成菜单树
返回的bean
@Data
@AllArgsConstructor
@NoArgsConstructor
public class VoMenu {
private int id;
private String name;
private String url;
private String pid;
private String icon;
private String type;
private String sort;
// 子菜单
private List<VoMenu> children;
}
Mapper
//自定义resultMap type指向映射的实体类
<resultMap type="com.XXX.XXX.XXX.XXX.VoMenu" id="BaseResultMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="url" column="url"/>
<result property="pid" column="pid"/>
<result property="icon" column="icon"/>
<result property="type" column="type"/>
<result property="sort" column="sort"/>
//property 实体类子菜单集合的名字
//column 透传到子查询的参数
//select select标签的id
//JavaType 是用来指定pojo中属性的类型
//ofType 指定的是映射到list集合属性中pojo的类型
<collection property="children" javaType="java.util.ArrayList" ofType="com.XXX.XXX.XXX.XXX.VoMenu" column="id" select="getChildLists"/>
</resultMap>
//父查询
<select id="findAllMenu" resultMap="BaseResultMap">
SELECT * FROM f_menu where pid=0
</select>
//子查询
<select id="getChildLists" resultMap="BaseResultMap">
SELECT * FROM f_menu where pid=#{id}
</select>
心得1
mybatis递归查询比较慢,建议直接查询结果,然后手写递归算法生成菜单 ↩︎