mysql组织机构树迭代查询

组织机构表结构

mysql组织机构树迭代查询_第1张图片

建表语句

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)
);

初始化数据

mysql组织机构树迭代查询_第2张图片


迭代查询组织结构

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映射文件配置如下:

 
   
   
   
 

 


映射的对象

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 findOrgInfListPage(@Param(value="orgId")String orgId,@Param(value="orgName")String orgName);






你可能感兴趣的:(mysql组织机构树迭代查询)