通常,myBatis的select方法返回单个对象或通用List类型。例如,我想获取类的所有学生:
<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;
}
我能怎么做?
最佳答案
这就是元素的作用。重要的是,您必须同时用其标记容器和值,以便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。
关于mybatis - 如何使myBatis选择结果(列表)设置为对象的属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24036940/