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>