一对一和一对多(@One @Many)

Exisi 2021-03-27 07:46:06
Categories: Tags:
  • @One @Many 注解分别表示一对一和一对多关系。@One 注解表示一个对象与另一个对象之间的一对一关系。它可以用在实体类中的属性上,指定该属性所对应的关联对象。@Many 注解表示一个对象与另一个对象之间的一对多关系。它可以用在实体类中的集合属性上,指定该集合所包含的关联对象列表。

 

  • @One @Many 注解有以下属性:

属性

描述

select

SQL 语句,指定可加载合适类型实例的映射语句(也就是映射器方法)全限定名

fetchType

用于指定关联对象的加载方式。有两个可选值 FetchType.LAZY FetchType.EAGER。默认FetchType.DEFAULT

resultMap

MyBatis 3.5.5 以上可用), 结果集的完全限定名,该结果映射到查询结果中的集合对象

columnPrefix

MyBatis 3.5.5以上可用),在嵌套的结果集中对所查询的列进行分组的列前缀。

示例

public interface StudentMapper(){

@Select("select * from Student")

@Results({

@Result(id=true, property="id", column="id"),

@Result(property="name",column="name"),

@Result(property="age",column="age"),

@Result(

property="address",

column="address_id",

one=@One(select="com.domain.mapper.AddressMapper.getAddress")

) 

}) 

public List<Student> getAllStudents();

}

示例

public interface StudentMapper(){

@Select("select * from mybatis_grade where id=#{id}") 

@Results({

@Result(id=true,column="id", property="id"), 

@Result(column="grade_name", property="gradeName"), 

@Result(

property="students",

column="id",

many=@Many(select="com.domain.mapper.StudentMapper.getStudentsByGradeId")

) 

}) 

public Grade getGrade(Integer id);

}