zoukankan      html  css  js  c++  java
  • 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();
        }
    此时基于SSM的操作已经完毕,核心就是在写mybatis的xml,可以在浏览器中查看运行结果,返回的是json数据。运行结果如下
     
     

    create by xiadewang

  • 相关阅读:
    JS中的“&&”与“&”和“||”“|”有什么区别?
    深入理解CSS过度动画transition
    使用navigator.userAgent查看浏览器当前模式和版本
    node.js面试题
    Javascript 中的 ...(展开运算符)
    JavaScript立即执行函数
    JavaScript实现继承的6种方式
    JavaScript的排序算法--冒泡、选择、直接插入
    JavaScript RegExp 对象
    (CVPR 2020 Oral)最新Scene Graph Generation开源框架
  • 原文地址:https://www.cnblogs.com/xiadewang/p/8879837.html
Copyright © 2011-2022 走看看