Как сделать MyBatis select result (list) равным свойству объекта?

как правило, метод select myBatis возвращает один объект или общие типы списков. например, я хочу привести всех учеников класса:

<select id="fetchStudentsOfClass" parameterType="int" resultMap="resultMapStudent">
    SELECT * FROM students WHERE class_id=#{id}
</select>

Я могу легко получить такой результат: List<Student>.

теперь, если я хочу получить такой результат, а не List<Student>:

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

как я могу это сделать?

1 ответов


для этого предназначен элемент . Важно, чтобы вы правильно пометили контейнер и значения с их , чтобы 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>

посмотреть http://mybatis.github.io/mybatis-3/sqlmap-xml.html#Result_Maps для более подробной информации.