mybatis的嵌套查询(单独查询)

2019-08-12  本文已影响0人  Apple_Boy

这里使用student和clazz之间的关系进行说明,一个student对应一个clazz,一个clazz对应多个学生
student类如下:

public class Student {

    private Integer id;
    private String name;
    private String sex;
    private Integer age;
    // 关联的Clazz对象
    private Clazz clazz;
}
对应数据库字段:
id  name  sex  age  clazz_id

clazz类如下:

public class Clazz {
    
    private Integer id;
    private String code;
    private List<Student> students;
}
对应数据库字段:
id code

下面的selectStudent会去resultMap中找出对应的字段,然后将column="clazz_id"当做条件传入selectClazzWithId,property属性对应的实体类当中的Clazz clazz属性,javaType表示该属性对应的类型名称

<!-- 映射学生对象的resultMap -->
  <resultMap id="studentResultMap" type="org.fkit.domain.Student">
      <id property="id" column="id" />
      <result property="name" column="name"/>
      <result property="sex" column="sex"/>
      <result property="age" column="age"/>
      <!-- 关联映射 -->
      <association property="clazz" column="clazz_id" 
      javaType="org.fkit.domain.Clazz"
      select="selectClazzWithId"/>
    </resultMap>
    
  <!-- 根据班级id查询班级 -->
  <select id="selectClazzWithId" resultType="org.fkit.domain.Clazz">
    SELECT * FROM TB_CLAZZ where id = #{id}
  </select>
  
  <!-- 查询所有学生信息 -->
  <select id="selectStudent" resultMap="studentResultMap">
    SELECT * FROM TB_STUDENT
  </select>

下面的selectClazz会去resultMap中找出对应的字段,然后将column="id"当做条件传入selectStudentWithId,property属性对应的实体类当中的Student cstudent属性,ofType表示的是集合当中类型

 <!-- 映射班级对象的resultMap -->
  <resultMap id="clazzResultMap" type="org.fkit.domain.Clazz">
      <id property="id" column="id" />
      <result property="code" column="code"/>
      <!-- 班级的学生属性,因为一个班级有多个学生,所以该属性是一个集合 -->
      <collection property="students" javaType="ArrayList"
      column="id" ofType="org.fkit.domain.Student" 
      select="selectStudentWithId"/>
    </resultMap>
    
    <!-- 根据班级id查询学生 -->
    <select id="selectStudentWithId" resultType="org.fkit.domain.Student">
        SELECT * FROM TB_STUDENT where clazz_id = #{id}
    </select>
    
    <!-- 查询所有班级信息 -->
  <select id="selectClazz" resultMap="clazzResultMap">
    SELECT * FROM TB_CLAZZ
  </select>
上一篇下一篇

猜你喜欢

热点阅读