`
chenshangge
  • 浏览: 88026 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类

Mybatis collection 应用

阅读更多
遇到一个业务场景,我有两张表一张员工表(staff) 主键staff_id  另一张叫 (员工部门关系表)staff_department。
因为一个员工(staff)可以属于多个部门(department),一个部门(department)会很多员工(staff),所以staff_department是一个 staff_id 与 department_id的一张多对多的关系表。
现在我需要在mybatis 查询一条staff的时候获得当前这个staff关联的所有department,于是用到collection。

staff 实体类
package com.asclepius.slhdt.serv.dao.domain.staff;

/**
 * @author chensg
 *
 */

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import org.springframework.format.annotation.DateTimeFormat;

import com.asclepius.slhdt.serv.dao.domain.department.Department;
import com.fasterxml.jackson.annotation.JsonFormat;

public class Staff implements Serializable {

	private static final long serialVersionUID = 1L;
	// 自动增长id
	private Integer staffIncId;
	// uuid
	private String staffId;
	// 姓名
	private String staffName;
	// 性别
	private Integer staffGender;
	
	// 所属部门
	private List<Department> departmentList;
	
	
	public Integer getStaffIncId() {
		return staffIncId;
	}
	public void setStaffIncId(Integer staffIncId) {
		this.staffIncId = staffIncId;
	}
	public String getStaffId() {
		return staffId;
	}
	public void setStaffId(String staffId) {
		this.staffId = staffId;
	}
	public String getStaffName() {
		return staffName;
	}
	public void setStaffName(String staffName) {
		this.staffName = staffName;
	}
	public Integer getStaffGender() {
		return staffGender;
	}
	public void setStaffGender(Integer staffGender) {
		this.staffGender = staffGender;
	}
	
	
	public List<Department> getDepartmentList() {
		return departmentList;
	}
	public void setDepartmentList(List<Department> departmentList) {
		this.departmentList = departmentList;
	}
	
	
}



staff与department是一个一对多关系,所以这里定义List<Department>

在xml中
<mapper namespace="com.asclepius.slhdt.serv.dao.mapper.staff.StaffMapper">

	<resultMap type="staff" id="staffResult">
		<id property="staffIncId" column="staff_inc_id" />
		<result property="staffId" column="staff_id" />
		<result property="staffName" column="staff_name" />
		<result property="staffGender" column="staff_gender" />
		<collection property="departmentList" column="staff_id" select="selectDepartment" ofType="department" javaType="ArrayList" />
	</resultMap>
	
	<select id="selectDepartment" parameterType="String" resultType="department" resultMap="departmentResult"  >  
        select SD.department_id, 
               D.department_parent_id,
               DP.department_name_alias 
               from shulan_staff_department SD
               left join shulan_department_prop DP on
               DP.department_id = SD.department_id
               left join shulan_department D on
               D.department_id = SD.department_id
               where SD.staff_id=#{staffId}  
    </select>  

	<resultMap type="department" id="departmentResult">
		<id property="departmentIncId" column="department_inc_id" />
		<result property="departmentId" column="department_id" />
		<result property="departmentParentId" column="department_parent_id" />
		<result property="departmentNameAlias" column="department_name_alias" />
	</resultMap>
<!-- 查询员工数据 -->
	<select id="getStaffById" parameterType="String" resultMap="staffResult">
		select S.staff_id,S.staff_name,S.staff_gender,
		from staff S
		where S.staff_id = #{param1}
	</select>


这里省去了很多staff中无关的字段。看collection标签 property="departmentList" 对应的就是实体类中的List<Department> departmentList属性。column与select要连在一起看,select=selectDepartment指的就是 下面id="selectDepartment的select映射SQL,column=staff_id指的就是关联主键的id。调用getstaffById就可以获得当前这个staff以及其关联的所有department
分享到:
评论

相关推荐

    mybatis collection list string

    这篇博文可能深入解析了MyBatis如何处理List作为参数或者返回值的情况,以及字符串操作在SQL构建中的应用。 描述中提到的"NULL"并没有提供具体的信息,但我们可以从标签"源码"和"工具"推断,这篇博客可能包含了对...

    Mybatis数据库的基本应用

    在本主题中,我们将深入探讨Mybatis在数据库基本应用中的关键功能,包括增删改查(CRUD)操作,以及如何与Eclipse集成进行开发。 1. **Mybatis概述** Mybatis是一个轻量级的ORM(对象关系映射)框架,它消除了几乎...

    详解mybatis foreach collection示例

    详解MyBatis foreach collection示例 MyBatis foreach collection是一个非常强大的功能,它允许开发者动态构建In集合条件查询。该功能可以指定一个集合,声明集合项和索引变量,这些变量可以在元素体内使用。此外,...

    基于mybatis的collection标签实现帖子评论多级回复以及关联用户信息查询

    在本场景中,我们探讨的是如何利用MyBatis的`collection`标签来实现帖子评论的多级回复以及与用户信息的关联查询。MyBatis是一个强大的Java持久层框架,它简化了数据库操作,使得开发者能更专注于SQL语句本身,而...

    Mybatis中collection和association的使用区别详解

    Mybatis 是一个流行的持久层框架,它提供了多种方式来实现在 Java 应用程序中与数据库交互。在 Mybatis 中,Collection 和 Association 是两个重要的概念,它们都是用于描述对象之间的关系,但是它们之间有着很大的...

    企业级应用开发-MyBatis关联映射实践实验报告.docx

    在企业级应用开发中,MyBatis 是一个广泛使用的持久层框架,它允许开发者将 SQL 查询与 Java 代码直接结合,提供了比传统 JDBC 更高效、更便捷的数据访问方式。本实验报告将详细阐述如何在 MyBatis 中进行关联映射的...

    Mybatis的高级应用

    在 JavaEE 开发中,Mybatis 的高级应用涉及到多个方面,包括动态 SQL、缓存机制、结果映射、事务管理以及自定义插件等。以下是对这些高级知识点的详细说明: 1. **动态 SQL**: Mybatis 的动态 SQL 功能允许开发者...

    MyBatis3 API 中文文档

    MyBatis作为一款优秀的持久层框架,主要解决了Java应用与数据库交互的问题。它支持普通的SQL查询、存储过程和高级映射,可以用来处理复杂的SQL,例如联表查询等,并且支持动态SQL语句,这在处理有较多条件判断的场景...

    MyBatis 中文官方文档

    MyBatis 提供了强大的映射元素,如`&lt;resultMap&gt;`用于定义结果集映射,`&lt;association&gt;`和`&lt;collection&gt;`用于处理复杂对象关系,以及`&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`等结构,实现类似Java的if-else逻辑。...

    MyBatis入门到精通

    MyBatis是一款强大的Java持久层框架,它将SQL与...通过这份“MyBatis入门到精通”的学习资料,新手可以系统地学习MyBatis的基础知识,理解其核心概念,并逐步掌握实际项目中的应用技巧,从而成为熟练的MyBatis开发者。

    mybatis延迟加载样例

    标题中的“mybatis延迟加载样例”意味着我们将探讨如何在MyBatis中实现和使用延迟加载,以及它的具体应用场景。延迟加载是ORM框架的一个重要特性,能够有效防止大数据量的加载导致的内存溢出问题。 描述中提到的...

    MyBatis常用项目范例

    在MyBatis中,这需要使用`association`和`collection`标签来配置映射。在实际应用中,你可能会遇到懒加载和急加载的概念,前者在需要时加载关联数据,后者则在获取主对象时一并加载关联数据。 在这些范例中,你会...

    MyBatis框架的应用

    【标题】:MyBatis框架的应用 在Java开发中,MyBatis是一个广泛使用的持久层框架,它将SQL语句与代码分离,提高了开发效率和可维护性。本主题主要探讨MyBatis中的动态SQL元素,包括、、、、、和,这些都是构建灵活...

    mybatis 父子级树形结构查询

    在MyBatis的映射XML文件中,`&lt;collection&gt;`标签用于表示一对多的关系,它允许我们在一次查询中获取到一个对象的所有子对象,从而构建出树形结构。例如,如果我们有一个`Department`实体类,其中包含一个`List...

    mybatis-3-config.dtd mybatis-3-mapper.dtd

    在实际应用中,`mybatis-3-config.xml`通常包含整个MyBatis系统的配置,而多个`mybatis-3-mapper.xml`文件则分别对应不同的数据库表或业务对象,每个文件内定义了对应的SQL语句和结果映射。 在项目中,`mybatis-3-...

    mybatis demo

    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数...通过深入研究这个示例,你可以逐步熟悉MyBatis的工作原理,并将其应用于实际的项目开发中。

    springmybatis

    MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis ...

    mybatis实战

    Mybatis提供了处理复杂关联关系的能力,通过association(一对一)、collection(一对多)和many-to-many(多对多)标签,可以轻松地映射出复杂的数据库表关系。 12、自定义类型处理器 对于特殊的数据类型,Mybatis...

    mybatis深入浅出

    本教程将全面介绍MyBatis的核心概念、主要功能以及实际应用。 首先,我们要了解MyBatis的基本架构。MyBatis的核心是SqlSessionFactory,它是MyBatis的配置中心,负责创建SqlSession对象。SqlSession提供了与数据库...

    mybatis关联映射源码

    在MyBatis中,使用`&lt;collection&gt;`标签来表示这种关系。你需要指定集合类型(如List或Set),关联的Java类,以及用于连接的主键字段。MyBatis会执行子查询,将所有关联的对象加载到主对象的集合属性中。在`chapter10_...

Global site tag (gtag.js) - Google Analytics