ibatis解决多对一n+1问题(更新上传例子(mybatis)代码)
n+1问题对系统的性能影响是不言而喻的,ibatis和hibernate一样也存在n+1问题,比如一个学生所属的班级,
在查询学生的时候同时把班级信息也查询出来,如果按照ibatis普通的多对一映射方法配置的话,就会出现n+1问题。
其实ibatis有种方法可以避免的,代码如下。
ibatis配置文件:
?类:
public class Classes { private Integer id; private String name; private List<Student> studentList; private List<Teacher> teacherList; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Student> getStudentList() { return studentList; } public void setStudentList(List<Student> studentList) { this.studentList = studentList; } public List<Teacher> getTeacherList() { return teacherList; } public void setTeacherList(List<Teacher> teacherList) { this.teacherList = teacherList; } } public class Student {private Integer id;private String name;private Classes classes;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Classes getClasses() {return classes;}public void setClasses(Classes classes) {this.classes = classes;}}?
以上代码的实现方式,是采用一条sql join查询出所有的数据,然后使用resultMap进行映射,resultMap确实是个好东西啊。
?
?
更新:
?上传了mybatis的例子代码,使用hsqldb做数据库,直接运行DbManager类的main方法就行了