对集合类型属性的实体类的查询集的封装
对集合类型属性的实体类的查询集的封装
实体类
public class Student {
private int id;
private String name;
private String sex;
//学生和学科的一对多关系
private List<Subject> subjectList;
其映射.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace: 所需实现的接口全限定名,里面的类名除了做别名设定的,都要用全限定名表示-->
<mapper namespace="com.hk.dao.StudentMapper"><!--1.namespace:这个映射文件.xml发生作用的地方(一个接口类)-->
<!-- 结果映射(查询结果的封装规则)-->
<resultMap id="studentResultMap" type="Student"> <!-- 2.id:自己取名,要唯一性。 3.type:用来封装接受返回结果集的全类名-->
<id property="id" column="id"/> <!-- 3.property,封装类的属性名 4.column 要被查询的别名-->
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<!-- =================================================== -->
<!--collection:代表封装类里面的集合属性如:List<Subject> subjectList;--> <!--ofType:填的值为集合泛型的全类名-->
<!--补充:<association property="" javaType=""> 表示一对一关系,即用它表示类里面的属性类型为实体类的属性-->
<!-- =================================================== -->
<collection property="subjectList" ofType="Subject">
<id property="id" column="subject_id"/><!-- collection标签里面的property表示Subject类的属性名-->
<result property="name" column="subject_name"/>
<result property="grade" column="grade"/>
</collection>
</resultMap>
<!-- 多对多关系的查询表的连接查询 -->
<!--5.id的值:namespace值接口的抽象方法名称. resultMap的值:结果映射的唯一标识id-->
<select id="selectStudentByName" resultMap="studentResultMap">
select st.id,st.name,st.sex,su.id as subject_id,su.name as subject_name,su.grade
from t_studuent st
inner join t_student_subject tss <!-- 通过t_stu_sub表建立二者之间的关系 -->
on st.id=tss.student_id
inner join t_subject su on tss.subject_id=su.id
where st.name=#{name}
</select>
</mapper>
实例联系
Don't just do it. Show me your Blog. 语雀地址 : https://www.yuque.com/bigbeardhk/java