对集合类型属性的实体类的查询集的封装

对集合类型属性的实体类的查询集的封装

实体类
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 say it. Show me your code.
原文地址:https://www.cnblogs.com/bigbeardhk/p/13154531.html