Contents

MyBatis 实现多级菜单

entity

package com.wgymt.jxc.entity;

import lombok.Data;

import java.util.List;

/**
 * 商品类别VO
 */
@Data
public class GoodsTypeVO {

    private Integer goodsTypeId;
    private String goodsTypeName;
    private Integer pId;
    private Integer goodsTypeState;

    private List<GoodsTypeVO> children;
}

Dao

package com.wgymt.jxc.dao;

import com.wgymt.jxc.entity.GoodsTypeVO;

import java.util.List;

public interface GoodsTypeDao {

    // 返回根目录
    List<GoodsTypeVO> selectGoodsTypeTree();

    // 根据父级菜单获取子菜单(二级.三级...)
    List<GoodsTypeVO> selectChildrenTree(Integer pId);
}

service

package com.wgymt.jxc.service;

/**
 * 商品类别
 */
public interface GoodsTypeService {

    // 商品分类树形展示
    String getGoodsTypeTree();
}

mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.wgymt.jxc.dao.GoodsTypeDao">

    <resultMap id="goodsTypeVOMap" type="com.atguigu.jxc.entity.GoodsTypeVO">
        <id column="goods_type_id" property="goodsTypeId"/>
        <result column="goods_type_name" property="goodsTypeName"/>
        <result column="p_id" property="pId"/>
        <result column="goods_type_state" property="goodsTypeState"/>
        <collection property="children" ofType="com.atguigu.jxc.entity.GoodsTypeVO" select="selectChildrenTree"
                    column="goods_type_id"/>
    </resultMap>
    <select id="selectGoodsTypeTree" resultMap="goodsTypeVOMap">
        SELECT goods_type_id,
               goods_type_name,
               p_id,
               goods_type_state
        FROM t_goods_type
        WHERE p_id = -1
    </select>

    <select id="selectChildrenTree" resultMap="goodsTypeVOMap">
        SELECT goods_type_id,
               goods_type_name,
               p_id,
               goods_type_state
        FROM t_goods_type
        WHERE p_id = #{goodsTypeId}
    </select>
</mapper>