Mybatis通过colliection属性递归获取菜单树
1、现有商品分类数据表category结构如下,三个字段都为varchar类型
2、创建商品分类对应的数据Bean
- /**
- *
- */
- package com.xdw.dao;
- import java.util.List;
- import com.xdw.model.Category;
- /**
- * @author xiadewang
- *2018年4月16日
- */
- public interface CategoryDao {
- List<Category> getCategoryList();
- }
3、创建CategoryDao.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.xdw.dao.CategoryDao">
- <!-- 初始化菜单树 -->
- <!-- 这里的id的值作为下面的查询返回结果resultMap的值 -->
- <!-- collection中的column属性可以为多个值,这里只有一个,它作为下面递归查询传递进去的参数 -->
- <!-- ofType和javaType属性正好联合构成了数据Bean类Category中的childrenList属性的数据类型 -->
- <!-- select的值为下面递归查询的select标签的id值 -->
- <resultMap type="Category" id="categoryTree">
- <result column="cid" property="cid" javaType="java.lang.String" />
- <result column="cname" property="cname" javaType="java.lang.String" />
- <result column="pid" property="pid" javaType="java.lang.String" />
- <collection column="cid" property="childrenList" ofType="Category" javaType="java.util.ArrayList" select="selectCategoryChildrenByCid"/>
- </resultMap>
- <!-- 先查询菜单根级目录 -->
- <!-- 这里的返回结果必须为resultMap,并且值为上面构建的resultMap的id的值 -->
- <select id="getCategoryList" resultMap="categoryTree">
- select * from category where pid = 'root'
- </select>
- <!-- 再利用上次查询结果colliection中column的值cid做递归查询,查出所有子菜单 -->
- <!-- 这里的返回结果必须为resultMap,并且值为上面构建的resultMap的id的值 -->
- <select id="selectCategoryChildrenByCid" resultMap="categoryTree" parameterType="String">
- select * from category where pid = #{cid}
- </select>
- </mapper>
4、service层
- /**
- *
- */
- package com.xdw.service;
- import java.util.List;
- import com.xdw.model.Category;
- /**
- * @author xiadewang
- *2018年4月16日
- */
- public interface CategoryService {
- List<Category> getCategoryList();
- }
- /**
- *
- */
- package com.xdw.service.impl;
- import java.util.List;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import com.xdw.dao.CategoryDao;
- import com.xdw.model.Category;
- import com.xdw.service.CategoryService;
- /**
- * @author xiadewang
- *2018年4月16日
- */
- @Service
- public class CategoryServiceImpl implements CategoryService {
- @Autowired
- private CategoryDao categoryDao;
- /* (non-Javadoc)
- * @see com.xdw.service.CategoryService#getCategoryList()
- */
- @Override
- public List<Category> getCategoryList() {
- // TODO Auto-generated method stub
- return categoryDao.getCategoryList();
- }
- }
4、controller层
- @RequestMapping("/getCategoryTree")
- @ResponseBody
- public List<Category> getCategoryTree() {
- return categoryService.getCategoryList();
- }
create by xiadewang
Mybatis通过colliection属性递归获取菜单树的更多相关文章
- c#递归读取菜单树
1.查询菜单节点下所有子节点id List<sys_module> menus = new List<sys_module>() { }; public async Task& ...
- java从数据库读取菜单,递归生成菜单树
首先看一下菜单的样子 根据这个样子我们定义菜单类 public class Menu { // 菜单id private String id; // 菜单名称 private String name; ...
- java递归构建菜单树
package testSimple; import java.util.ArrayList; import java.util.List; public class BuildTree { publ ...
- Java递归获取部门树 返回jstree数据
@GetMapping("/getDept")@ResponseBodypublic Tree<DeptDO> getDept(String deptId){ Tree ...
- java生成多级菜单树
使用java实现一个多级菜单树结构 先上数据库 ps_pid字段很重要,是父级菜单的id Menu类 Menu类要新增一个字段,用来存放子菜单 /** * 子菜单列表 */ private List& ...
- React + Antd Menu组件实现菜单树
准备好两个变量,一个用来保存平级菜单列表,一个用来保存遍历后的菜单树. 推荐后端返回平级菜单树,假如菜单比较多,可以直接结合find方法找到菜单,做搜索功能很省事. const [menuList, ...
- php递归获取无限分类菜单
从数据库获取所有菜单信息,需要根据id,pid字段获取主菜单及其子菜单,以及子菜单下的子菜单,可以通过函数递归来实现. <?php class Menu { public $menu = arr ...
- bootstrap treeview实现菜单树
本博客,介绍通过Bootstrap的treeview插件实现菜单树的功能. treeview链接:http://www.htmleaf.com/Demo/201502141380.html ORM框架 ...
- java实现的可以无限级别添加子节点的菜单树
网上大部分菜单树,都是单独用js代码来实现的,这样做的缺点是:用户无法动态的设置菜单项,比如,超级管理员可能需要根据每个用户的权限,赋予他们不同的系统功能,不同的功能对应着不同数量的菜单项. 对于此问 ...
随机推荐
- MySQLzip压缩文件格式安装教程
MySQL是一个小巧玲珑但功能强大的数据库,目前十分流行.但是官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的.很多人下了zip格式的解压发现没有setup.exe,面对一堆文件一头雾 ...
- iOS-----使用CoreLocation定位
使用CoreLocation定位 CoreLocation框架 (CoreLocation.framework)可用于定位设备当前经纬度, 通过该框架, 应用程序可通过附近的蜂窝基站\WIFI信号 或 ...
- Android 引入外部模块编译选择
/********************************************************************************* * Android 引入外部模块编 ...
- linux-推荐两款好用的录屏软件
前言 测试程序过程中需要看运行效果如何,可以使用录屏软件进行回放. 软件安装 添加源:sudo add-apt-repository ppa:maarten-baert/simplescreenrec ...
- python3 lambda函数
A=lambda x:x+1 def A(x):return x+1 冒号左边→想要传递的参数冒号右边→想要得到的数(可能带表达式)
- (8)os和sys模块
import sysprint(sys.argv) #默认获取当前文件的路径 import os os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir(& ...
- 关于springmvc 返回json数据null字段的显示问题-转https://blog.csdn.net/qq_23911069/article/details/62063450
最近做项目(ssm框架)的时候,发现从后台返回的json(fastjson)数据对应不上实体类,从数据库查询的数据,如果对应的实体类的字段没有信息的话,json数据里面就不显示,这不是我想要的结果,准 ...
- grandstack graphql 工具基本试用
grandstack 是一个方便graphql 应用开发的工具 使用docker-compose 运行 环境准备 官方的starter 比较好,已经是使用docker-compose 创建好了所有 ...
- SVN、Git设置提交时忽略的文件
个人正在使用的:global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.pyc *.pyo [Tt]humbs.db [Bb]in [ ...
- Ritchie Lawrence 批处理函数库中英文版
可以到这个网址去看看,如果你是注册用户,还可以下载到bat的很多函数库,具体地址如下: http://www.bathome.net/viewthread.php?tid=3056&extra ...