1、现有商品分类数据表category结构如下,三个字段都为varchar类型

2、创建商品分类对应的数据Bean

  1. /**
  2. *
  3. */
  4. package com.xdw.dao;
  5.  
  6. import java.util.List;
  7.  
  8. import com.xdw.model.Category;
  9.  
  10. /**
  11. * @author xiadewang
  12. *2018年4月16日
  13. */
  14. public interface CategoryDao {
  15. List<Category> getCategoryList();
  16. }

3、创建CategoryDao.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.xdw.dao.CategoryDao">
  4. <!-- 初始化菜单树 -->
  5. <!-- 这里的id的值作为下面的查询返回结果resultMap的值 -->
  6. <!-- collection中的column属性可以为多个值,这里只有一个,它作为下面递归查询传递进去的参数 -->
  7. <!-- ofType和javaType属性正好联合构成了数据Bean类Category中的childrenList属性的数据类型 -->
  8. <!-- select的值为下面递归查询的select标签的id值 -->
  9. <resultMap type="Category" id="categoryTree">
  10. <result column="cid" property="cid" javaType="java.lang.String" />
  11. <result column="cname" property="cname" javaType="java.lang.String" />
  12. <result column="pid" property="pid" javaType="java.lang.String" />
  13. <collection column="cid" property="childrenList" ofType="Category" javaType="java.util.ArrayList" select="selectCategoryChildrenByCid"/>
  14. </resultMap>
  15.  
  16. <!-- 先查询菜单根级目录 -->
  17. <!-- 这里的返回结果必须为resultMap,并且值为上面构建的resultMap的id的值 -->
  18. <select id="getCategoryList" resultMap="categoryTree">
  19.  
  20. select * from category where pid = 'root'
  21.  
  22. </select>
  23.  
  24. <!-- 再利用上次查询结果colliection中column的值cid做递归查询,查出所有子菜单 -->
  25. <!-- 这里的返回结果必须为resultMap,并且值为上面构建的resultMap的id的值 -->
  26. <select id="selectCategoryChildrenByCid" resultMap="categoryTree" parameterType="String">
  27.  
  28. select * from category where pid = #{cid}
  29.  
  30. </select>
  31. </mapper>

4、service层

  1. /**
  2. *
  3. */
  4. package com.xdw.service;
  5.  
  6. import java.util.List;
  7.  
  8. import com.xdw.model.Category;
  9.  
  10. /**
  11. * @author xiadewang
  12. *2018年4月16日
  13. */
  14. public interface CategoryService {
  15. List<Category> getCategoryList();
  16. }
  17.  
  18. /**
  19. *
  20. */
  21. package com.xdw.service.impl;
  22.  
  23. import java.util.List;
  24.  
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Service;
  27.  
  28. import com.xdw.dao.CategoryDao;
  29. import com.xdw.model.Category;
  30. import com.xdw.service.CategoryService;
  31.  
  32. /**
  33. * @author xiadewang
  34. *2018年4月16日
  35. */
  36. @Service
  37. public class CategoryServiceImpl implements CategoryService {
  38. @Autowired
  39. private CategoryDao categoryDao;
  40. /* (non-Javadoc)
  41. * @see com.xdw.service.CategoryService#getCategoryList()
  42. */
  43. @Override
  44. public List<Category> getCategoryList() {
  45. // TODO Auto-generated method stub
  46. return categoryDao.getCategoryList();
  47. }
  48.  
  49. }

4、controller层

  1. @RequestMapping("/getCategoryTree")
  2. @ResponseBody
  3. public List<Category> getCategoryTree() {
  4. return categoryService.getCategoryList();
  5. }
此时基于SSM的操作已经完毕,核心就是在写mybatis的xml,可以在浏览器中查看运行结果,返回的是json数据。运行结果如下
 
 

create by xiadewang

Mybatis通过colliection属性递归获取菜单树的更多相关文章

  1. c#递归读取菜单树

    1.查询菜单节点下所有子节点id List<sys_module> menus = new List<sys_module>() { }; public async Task& ...

  2. java从数据库读取菜单,递归生成菜单树

    首先看一下菜单的样子 根据这个样子我们定义菜单类 public class Menu { // 菜单id private String id; // 菜单名称 private String name; ...

  3. java递归构建菜单树

    package testSimple; import java.util.ArrayList; import java.util.List; public class BuildTree { publ ...

  4. Java递归获取部门树 返回jstree数据

    @GetMapping("/getDept")@ResponseBodypublic Tree<DeptDO> getDept(String deptId){ Tree ...

  5. java生成多级菜单树

    使用java实现一个多级菜单树结构 先上数据库 ps_pid字段很重要,是父级菜单的id Menu类 Menu类要新增一个字段,用来存放子菜单 /** * 子菜单列表 */ private List& ...

  6. React + Antd Menu组件实现菜单树

    准备好两个变量,一个用来保存平级菜单列表,一个用来保存遍历后的菜单树. 推荐后端返回平级菜单树,假如菜单比较多,可以直接结合find方法找到菜单,做搜索功能很省事. const [menuList, ...

  7. php递归获取无限分类菜单

    从数据库获取所有菜单信息,需要根据id,pid字段获取主菜单及其子菜单,以及子菜单下的子菜单,可以通过函数递归来实现. <?php class Menu { public $menu = arr ...

  8. bootstrap treeview实现菜单树

    本博客,介绍通过Bootstrap的treeview插件实现菜单树的功能. treeview链接:http://www.htmleaf.com/Demo/201502141380.html ORM框架 ...

  9. java实现的可以无限级别添加子节点的菜单树

    网上大部分菜单树,都是单独用js代码来实现的,这样做的缺点是:用户无法动态的设置菜单项,比如,超级管理员可能需要根据每个用户的权限,赋予他们不同的系统功能,不同的功能对应着不同数量的菜单项. 对于此问 ...

随机推荐

  1. HDU 4185

    http://acm.hdu.edu.cn/showproblem.php?pid=4185 两个挨着的'#'可以配成一对,求最多能配成几对 挨着的'#'就连边,然后求一次最大匹配,答案是最大匹配除以 ...

  2. 软考------(抽象类、接口) 策略设计模式(strategy) 应用

    某软件公司现欲开发一款飞机飞行模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征.需要模拟的飞机种类及其特征如表5-1所示. #include <iostream> #include ...

  3. C经典案例

    1. C中可变参数函数作为函数参数: void media_debug_set_handler(struct media_device *media, void (*debug_handler)(vo ...

  4. jaeger 使用ElasticSearch 作为后端存储

    jaeger 支持es 作为后端存储,这样对于查询.以及系统扩展是比较方便的 使用docker-compose 运行 环境准备 参考项目: https://github.com/rongfenglia ...

  5. c#代码获取web.config配置文件里面设置的 <compilation debug="true"节点

    == 在我们的web.config文件中,有像下面的这样的一个配置, <system.web> <identity impersonate="true" user ...

  6. Kettle入门教程

    最近做的项目用到了ETL工具Kettle,这个工具相当好用,可以将各种类型数据作为数据流,经过处理后再生成各种类型的数据.正如其名“水壶”,将各个地方的水倒进水壶里,再用水壶倒入不同的容器.不过一来初 ...

  7. FastAdmin selectPage 前端传递查询条件

    ★夕狱-东莞 2018/2/2 16:19:33 selectpage 怎么在前端传递查询条件,看了下源码,好像有个custom,怎么用来的,比如我要下拉的时候,只显示id=1的数据 Karson-深 ...

  8. java初始化块执行顺序

    java中初始化块的执行顺序在构造器之前,多个初始化块之间定义在前的先执行.如下: public class InitialBlockTest { // The first one { System. ...

  9. jquery编辑插件tinyMCE的使用方法

    jquery编辑插件tinyMCE是一个非常容易集成到您系统的一个html编辑插件,它不像FckEditor那样需要针对专门的后台语言集成,tinyMCE既能做到轻松集成asp.net,php,jav ...

  10. HttpClient连接池

    HttpClient连接池,发现对于高并发的请求,效率提升很大.虽然知道是因为建立了长连接,导致请求效率提升,但是对于内部的原理还是不太清楚.后来在网上看到了HTTP协议的发展史,里面提到了一个属性C ...