mybatis中association和collection的区别
时间: 2024-06-12 14:11:10 浏览: 179
在 MyBatis 中,association 和 collection 都是用来处理一对多关系的。其中,association 用于处理一对一关系,而 collection 用于处理一对多关系。
具体来说,association 用于将两个表中的一条记录关联起来,例如一个订单和一个用户,一个订单只能属于一个用户,那么就可以使用 association 来将订单表中的用户 ID 关联到用户表中的用户记录上。
而 collection 则用于将两个表中的多条记录关联起来,例如一个部门和多个员工,一个部门可以有多个员工,那么就可以使用 collection 来将部门表中的部门 ID 关联到员工表中的多个员工记录上。
相关问题
mybatis association和collection区别
MyBatis中的association和collection是两种不同的映射关系。
1. association:association用于建立一对一的关联关系。它可以将一个结果集中的多个列映射到一个Java对象中的一个属性上。通常,在数据库中使用外键关联两个表时,可以使用association来表示这种关系。
2. collection:collection用于建立一对多的关联关系。它可以将一个结果集中的多个列映射到一个Java对象中的一个集合属性上。通常,在数据库中使用一对多的关联关系时,可以使用collection来表示这种关系。
区别:
- association用于表示一对一的关联关系,而collection用于表示一对多的关联关系。
- association将多个列映射到一个属性上,而collection将多个列映射到一个集合属性上。
- association生成的Java对象中的属性类型是单个对象,而collection生成的Java对象中的属性类型是集合类型。
mybatis plus 中 association和collection 的例子
MyBatis Plus中的Association和Collection都是用于多表关联查询的。其中Association用于一对一的关系,Collection用于一对多的关系。
下面是一个Association的例子:
假设我们有两个表,一个是学校表(school),另一个是班级表(class)。一个学校可以有多个班级,但一个班级只属于一个学校。我们需要查询学校信息,并且将学校下的所有班级信息也一并查询出来。
```java
public class School {
private Long id;
private String name;
private List<Class> classes; // getter and setter
}
public class Class {
private Long id;
private String name;
private Long schoolId;
// getter and setter
}
```
对应的Mapper.xml文件如下:
```xml
<select id="getSchoolById" resultMap="schoolResultMap">
select * from school where id = #{id}
</select>
<resultMap id="schoolResultMap" type="School">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="classes" ofType="Class">
<id property="id" column="id"/>
<result property="name" column="name"/>
<association property="school" javaType="School">
<id property="id" column="school_id"/>
<result property="name" column="school_name"/>
</association>
</collection>
</resultMap>
```
上述代码中,我们使用了collection标签来表示一对多的关系,使用了association标签来表示一对一的关系。其中,association标签中的javaType属性表示关联的实体类类型,id标签中的column属性表示关联的字段名。
下面是一个Collection的例子:
假设我们有两个表,一个是班级表(class),另一个是学生表(student)。一个班级可以有多个学生,我们需要查询班级信息,并且将班级下的所有学生信息也一并查询出来。
```java
public class Class {
private Long id;
private String name;
private List<Student> students;
// getter and setter
}
public class Student {
private Long id;
private String name;
private Long classId;
// getter and setter
}
```
对应的Mapper.xml文件如下:
```xml
<select id="getClassById" resultMap="classResultMap">
select * from class where id = #{id}
</select>
<resultMap id="classResultMap" type="Class">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="students" ofType="Student">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="classId" column="class_id"/>
</collection>
</resultMap>
```
上述代码中,我们同样使用了collection标签来表示一对多的关系。注意,由于Student实体类中已经有了classId属性,因此我们不需要再使用association标签来表示一对一的关系。
阅读全文