如何将myBatis选择结果(列表)设置为object的属性?

guo*_*ngj 7 mybatis

通常,myBatis的select方法返回单个对象或通用List类型.例如,我想取一个班级的所有学生:

<select id="fetchStudentsOfClass" parameterType="int" resultMap="resultMapStudent">
    SELECT * FROM students WHERE class_id=#{id}
</select>
Run Code Online (Sandbox Code Playgroud)

我很容易得到这样的结果:List<Student>.

现在,如果我想得到这样的结果而不是List<Student>:

class MyClass
{
    List<Student> getStudents{return this.students;}
    void setStudents(List<Student> students){this.students = students}
    private List<Student> students;
}
Run Code Online (Sandbox Code Playgroud)

我能怎么做?

niv*_*eth 7

这就是<collection />元素的用途.使用<id />正确标记容器和值是很重要的,这样MyBatis就知道如何处理将多行折叠到一个对象中.

<resultMap id="resultMapClass" type="some.package.MyClass" autoMapping="true">
    <id property="classId" column="class_id" javaType="integer"/>
    <collection property="students" ofType="some.package.Student" autoMapping="true">
        <id property="studentId" column="student_id" javaType="integer"/>
    </collection>
</resultMap>
<select id="fetchStudentsOfClass" parameterType="int" resultMap="resultMapClass">
    SELECT *
    FROM students
    WHERE class_id = #{id}
</select>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅http://mybatis.github.io/mybatis-3/sqlmap-xml.html#Result_Maps.