在学习MyBatis3的过程中,文档上面一直在强调一个id的东西!在做这个实验的时候,也因为没有理解清楚id含义而导致一对多的“多”中也只有一条数据。id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。这帮助来改进整体表现,特别是缓存和嵌入结果映射。所以不同数据的id应该唯一区别,不然倒置数据结果集只有一条数据。
TeacherMapper.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"> <mapper namespace="com.nantian.mybatis.one2many.TeacherMapper"> <resultMap type="Teacher" id="teacher"> <id property="id" column="t_id" javaType="int" jdbcType="INTEGER"/> <result property="name" column="t_name" javaType="string" jdbcType="VARCHAR"/> <collection property="students" column="t_s_id" ofType="Student"> <id property="id" column="s_id" javaType="int" jdbcType="INTEGER"/> <result property="name" column="s_name" javaType="string" jdbcType="VARCHAR"/> </collection> </resultMap> <select id="one2many" parameterType="int" resultMap="teacher"> select t.t_id,t.t_name,s.t_s_id,s.s_id,s.s_name from teacher t join student s on t.t_id = s.t_s_id where t.t_id = #{id} </select> </mapper>
Teacher
package com.nantian.mybatis.one2one; import java.util.List; import com.nantian.mybatis.one2many.Student; public class Teacher { private int id; private String name; private List<Student> students; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } }
TeacherMapper
package com.nantian.mybatis.one2many; import com.nantian.mybatis.one2one.Teacher; public interface TeacherMapper { public Teacher one2many(int id); }
Student
package com.nantian.mybatis.one2many; public class Student { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
T
package com.nantian.mybatis.one2many; import java.util.List; import org.apache.ibatis.session.SqlSession; import com.nantian.mybatis.data.DBUtil; import com.nantian.mybatis.one2one.Teacher; public class T { public static void main(String[] args) { SqlSession sqlSession = DBUtil.getInstance().getSqlSessionFactory() .openSession(); try { TeacherMapper teacherMapper = sqlSession .getMapper(TeacherMapper.class); Teacher teacher = teacherMapper.one2many(100); List<Student> students = teacher.getStudents(); System.out.println(teacher.getId()); System.out.println(teacher.getName()); for (Student student : students) { System.out.println(student.getId()); System.out.println(student.getName()); } } finally { sqlSession.close(); } } }