在学习MyBatis3的过程中,文档上面一直在强调一个id的东西!在做这个实验的时候,也因为没有理解清楚id含义而导致一对多的“多”中也只有一条数据。id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。这帮助来改进整体表现,特别是缓存和嵌入结果映射。所以不同数据的id应该唯一区别,不然倒置数据结果集只有一条数据。
TeacherMapper.xml
<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
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
import com.nantian.mybatis.one2one.Teacher;
public interface TeacherMapper {
public Teacher one2many(int id);
}
Student
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
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();
}
}
}