转载自https://blog.csdn.net/u011935772/article/details/71419527

组织机构表结构

建表语句

drop table if exists Organize;

/*==============================================================*/
/* Table: Organize                                              */
/*==============================================================*/
create table Organize
(
   ID                   smallint not null auto_increment,
   ORG_NAME             int,
   UP_ID                int,
   ORG_CODE             char(4),
   primary key (ID)
);

初始化数据

迭代查询组织结构

oracle里面有迭代函数可用,

select XXX from table 
start with XXX
connect by prior XXX

mysql没有类似的迭代函数,需要自己写

创建函数语句

CREATE FUNCTION `getChildLst`(rootId INT)
    RETURNS varchar(1000)
    BEGIN
      DECLARE sTemp VARCHAR(1000);
      DECLARE sTempChd VARCHAR(1000);
    
      SET sTemp = ‘$’;
      SET sTempChd =cast(rootId as CHAR);
    
      WHILE sTempChd is not null DO
        SET sTemp = concat(sTemp,’,’,sTempChd);
        SELECT group_concat(id) INTO sTempChd FROM organize where FIND_IN_SET(up_id,sTempChd)>0;
      END WHILE;
      RETURN sTemp;
    END

查询语句如下(增加模糊条件可以对迭代查询后的数据进行筛选)

select o.ID orgId,o.ORG_CODE orgCode,o.ORG_NAME orgName from organize o
where FIND_IN_SET(id, getChildLst(45)) and o.ORG_NAME like ‘%%’;

关键是mybatis如何实现动态sql

mybatis映射文件配置如下:

<resultMap id=”OrgInfoListPageMap” type=”com.znyq.wfCloud.service.pageModel.OrgInfolistPage” >
    <result column=”orgId” property=”orgId” jdbcType=”SMALLINT” />
    <result column=”orgName” property=”orgName” jdbcType=”VARCHAR” />
    <result column=”orgCode” property=”orgCode” jdbcType=”CHAR” />
  </resultMap>

<select id=”findOrgInfListPage”  resultMap=”OrgInfoListPageMap” parameterType=”java.lang.String”>
   select o.ID orgId,o.ORG_CODE orgCode,o.ORG_NAME orgName from organize o
   <where>
   <if test=”orgId != null and ” != orgId” >
            FIND_IN_SET(id, getChildLst(#{orgId}))
   </if>
   <if test=”orgName != null and ” != orgName” >
            and o.ORG_NAME like CONCAT(CONCAT(‘%’, #{orgName}), ‘%’)
    </if>
    </where>
  </select>

映射的对象

public class OrgInfolistPage {

private String orgId;

private String orgCode;

private String orgName;

public String getOrgId() {
        return orgId;
    }

public void setOrgId(String orgId) {
        this.orgId = orgId;
    }

public String getOrgCode() {
        return orgCode;
    }

public void setOrgCode(String orgCode) {
        this.orgCode = orgCode;
    }

public String getOrgName() {
        return orgName;
    }

public void setOrgName(String orgName) {
        this.orgName = orgName;
    }

}

OrganizeMapper:

List<OrgInfolistPage> findOrgInfListPage(@Param(value=”orgId”)String orgId,@Param(value=”orgName”)String orgName);

mysql组织机构树迭代查询相关推荐

  1. mysql实现树状查询_MySQL实现树状所有子节点查询的方法

    本文实例讲述了MySQL实现树状所有子节点查询的方法.分享给大家供大家参考,具体如下: 在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方 ...

  2. B+树 范围查询_为什么 MySQL 使用 B+ 树,而不是 B 树或者 Hash?

    Java技术栈 www.javastack.cn 关注优质文章 为什么 MySQL 使用 B+ 树是面试中经常会出现的问题,很多人对于这个问题可能都有一些自己的理解,但是多数的回答都不够完整和准确.大 ...

  3. 在 MySQL 中使用 explain 查询 SQL 的执行计划(转自: 数据分析与开发)

    **来源:Oo若离oO my.oschina.net/ruoli/blog/1807394** 1.什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有 ...

  4. 在MySQL中使用explain查询SQL的执行计划

    1.什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解. MySQL本身的功能架构分为三个部分,分别是 应用层.逻辑层.物理层,不只是MyS ...

  5. mysql 统计查询总数_如何一眼识别MySQL选择哪种查询计划(上)

    导读 我在<IN字段查询多少个值最合适?>中讲到:MySQL基于索引的查询成本分析主要包含两个方案:扫描索引树和索引统计.那么在这一章节中,我将详细讲解MySQL优化器是如何通过这两种方案 ...

  6. 组织机构树数据库表设计

    公司需要做一个组织机构管理的系统,但是现有的数据库中存储的方式,机构之间的关联只是通过parent_id关联的,这样在查询的时候需要不断的递归查询表数据,性能很差,逻辑也不清晰.所以在网上找到了几种针 ...

  7. mysql b树子节点个数_MySQL 和 B 树的那些事-爱可生

    原标题:MySQL 和 B 树的那些事-爱可生 在介绍B树之前,先来看另一棵神奇的树--二叉排序树(Binary Sort Tree),首先它是一棵树,"二叉"这个描述已经很明显了 ...

  8. 一种多层级机构数据库表设计的思路及组织机构树数据库表设计

    在实际开发过程中,经常存在多个层级结构的设计,而且多个层级结构还需要排序.这里通过将多级结构的数据在同一张表中(无需多张表进行关联),并通过level的巧妙设计来实现单表查询. level的设计原则: ...

  9. MySQL多表关联查询效率高点还是多次单表查询效率高,为什么?

    这里写目录标题 MySQL多表关联查询对比多次单表查询,哪个效率高? 疑问: 高手解答: <阿里巴巴JAVA开发手册>里面写超过三张表禁止join 这是为什么?这样的话那sql要怎么写? ...

最新文章

  1. SqlDataAdapter上调用存储过程
  2. python之路 mysql 博客园_Python之路(二十七):Mysql(下)
  3. 【渝粤题库】国家开放大学2021春3938管理英语2题目
  4. 数据结构两个月学完_这是我作为数据科学家两年来所学到的
  5. Booster 系列之——多线程优化
  6. LeetCode 第 207 场周赛(245/4115,前5.95%)
  7. linux驱动头文件查找目录,在Fedora 20中查找简单设备驱动程序的头文件
  8. 数据结构(Splay平衡树):COGS 339. [NOI2005] 维护数列
  9. Maven : has broken classes path unknown
  10. TCP/IP卷一实验之------EIGRP
  11. Java 使用 POI 对 Excel文件 进行读写操作
  12. IE6下绝对定位层不显示
  13. bip动作捕捉_Mocap动作捕捉系列
  14. 概率论与数理统计学习笔记(3)——Pearson相关系数与Spearman相关系数
  15. c# 基于BouncyCastle.Crypto的国密sm2,sm4封装,与java版本兼容
  16. PullToRefreshListView刷新2
  17. 原创 | DDD领域驱动设计第一话
  18. 3种性格容易焦虑 你知道吗
  19. Packet Tracer 6.0基础知识
  20. LSM-tree基本原理及应用

热门文章

  1. 时序逻辑电路设计实例
  2. JAVA_匿名内部类
  3. 宏基微型计算机机箱怎么打开,电脑机箱怎么打开
  4. 电脑开热点给手机七步法,买路由器的钱都省了
  5. MySQL(五)-数学函数的使用解析
  6. 小米8位置服务器,超旗舰新机小米8,强大的GPS定位无人能及!
  7. 乐高积木树屋_创建树屋青蛙动画
  8. 通过硬件断点对抗hook检测
  9. Intellij IDEA快捷键大全汇总(一)
  10. 【逆元】【bzoj 3823】: 定情信物