栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis一对多的查询的两种方式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatis一对多的查询的两种方式

需求简介:

有3张表,部门 ---->组织 ---->员工,一个部门包含多个组织,每个组织下有多名员工,现在需要根据部门ID查询某个部门下的所有组织,以及每个组织下的所有员工信息,返回的是一个树形结构数据。

一、表结构

1.部门表
CREATE TABLE `department` (
  `id` int NOT NULL,
  `dept_name` varchar(255) DEFAULT NULL,
  `dept_location` varchar(255) DEFAULT NULL,
  `tenant_id` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

2.组织表
CREATE TABLE `groups` (
  `id` int NOT NULL,
  `group_name` varchar(255) DEFAULT NULL,
  `dept_id` int NOT NULL,
  `tenant_id` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

3.员工表
CREATE TABLE `employee` (
  `id` int NOT NULL,
  `employee_name` varchar(255) DEFAULT NULL,
  `group_id` int NOT NULL,
  `tenant_id` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

二、实体类

1.部门

@Data
@TableName("department")
public class Department {
	private Integer id;
	private String deptName;
	private String deptLocation;
	private List groupList;
}
2.组织

@Data
@TableName("groups")
public class Groups {
	private Integer id;
	private String groupName;
	private List employeeList;
}

3.员工
@Data
@TableName("employee")
public class Employee {
	private Integer id;
	private String employeeName;
}

三、查询方法

//根据部门ID查询
@Mapper
public interface DepartmentMapper extends BaseMapper {
    List testMybatis(@Param("id") Integer id);
}

四、mapper.xml,sql有两种写法,查询结果是一样的
第一种:


        
        
        
        
    

    
        
        
        
    

    
        
        
    

    
        SELECT
            b.id,
            b.group_name
        FROM
            `groups` b
        WHERe
            b.dept_id = #{id}
    

    
        SELECT
            a.id,
            a.dept_name,
            a.dept_location,
            b.id as gid,
            b.group_name,
            c.id as eid,
            c.employee_name
        FROM department a
        LEFT JOIN `groups` b ON a.id = b.dept_id
        LEFT JOIN `employee` c ON b.id = c.group_id
        WHERe a.id = #{id}
    

五、查询结果

备注:
关于查询sql的写法,第一种定义了3个resultMap,对应3个单表查询sql,比较容易理解,条理关系清晰,但是代码比较多。第二种代码量少一些,采用多表关联查询,只有一个resultMap,可以根据实际情况来选择使用哪种方式。至于两者性能,还没研究过,有空再补。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号