package mybatis.pojo;

import java.util.List;

public class Menu {
    private Integer id;
    private String name;
    private String url;
    private Integer parent_id;
    private List<Menu> childMenu;

    public Menu() {
    }

    public Menu(Integer id, String name, String url, Integer parent_id, List<Menu> childMenu) {
        this.id = id;
        this.name = name;
        this.url = url;
        this.parent_id = parent_id;
        this.childMenu = childMenu;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Integer getParent_id() {
        return parent_id;
    }

    public void setParent_id(Integer parent_id) {
        this.parent_id = parent_id;
    }

    public List<Menu> getChildMenu() {
        return childMenu;
    }

    public void setChildMenu(List<Menu> childMenu) {
        this.childMenu = childMenu;
    }

    @Override
    public String toString() {
        return "Menu{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", url='" + url + '\'' +
                ", parent_id=" + parent_id +
                ", childMenu=" + childMenu +
                '}';
    }
}


public interface MenuMapper {

    List<Menu> selectAllTree();

}

<?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="mybatis.mapper.MenuMapper">
    <resultMap id="treeVoMap" type="mybatis.pojo.Menu">
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <result column="url" property="url" jdbcType="VARCHAR" />
        <result column="parent_id" property="parent_id" jdbcType="INTEGER" />
        <collection property="childMenu" ofType="mybatis.pojo.Menu"
                    column="id" select="findTreeByPid"/>
    </resultMap>

    <!--级联查询父菜单-->
    <select id="selectAllTree" resultMap="treeVoMap" >
         select * from m_menu where parent_id = 0
    </select>

    <!--级联查询子菜单-->
    <select id="findTreeByPid" resultMap="treeVoMap" >
         select * from m_menu where parent_id = #{id}
    </select>

</mapper>

    @Test
    public void test03() throws IOException {
        SqlSession sqlSession = SqlSeesionUtils.getSqlSession();
        MenuMapper mapper = sqlSession.getMapper(MenuMapper.class);
        try {

            List<Menu> menu = mapper.selectAllTree();
            String str =JSON.toJSONString(menu);;
            System.out.println(str);
        } finally {
            sqlSession.close();
        }
    }

源代码地下如下:

mybatis-practise: mybatis练习代码

建表sql如下:

/*
Navicat MySQL Data Transfer

Source Server         : mysql
Source Server Version : 50626
Source Host           : localhost:3306
Source Database       : test

Target Server Type    : MYSQL
Target Server Version : 50626
File Encoding         : 65001

Date: 2022-07-31 15:16:42
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for m_menu
-- ----------------------------
DROP TABLE IF EXISTS `m_menu`;
CREATE TABLE `m_menu` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `url` varchar(255) DEFAULT NULL,
  `parent_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of m_menu
-- ----------------------------
INSERT INTO `m_menu` VALUES ('1', '系统设置', '/1', '0');
INSERT INTO `m_menu` VALUES ('1001', '菜单设置', '/1001', '1');
INSERT INTO `m_menu` VALUES ('1002', '权限设置', '/1002', '1');
INSERT INTO `m_menu` VALUES ('2', '报表', '/2', '0');
INSERT INTO `m_menu` VALUES ('2001', '销售报表', '/2001', '2');
INSERT INTO `m_menu` VALUES ('2002', '业绩报表', '/2002', '2');

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐