ibatis 对象一对多解决N+1问题

来源:互联网 发布:windows10自带录屏软件 编辑:程序博客网 时间:2024/06/08 07:56

有两张表:student(id,name,num,classes_id)、classes(id,description),一个学生只属于某一个班级,但某一个班下可以有多个学生

classes类中须有List<Student> studentList对象      简单的set(),get()方法

student_id
sqlMap.xml配置
groupBy="id":表示根据班级的id支装配student,只要有学生班级Id相等的数据都装配到studentList对象中
<resultMap class="classes" id="classesResult" groupBy="id"> 注意不能用select * 代替字段,有可能会出不来,须把字段id写在语句中,尽量property和column中字段相等。这样会少出现问题。
<result property="id" column="id" /> <result property="description" column="description" />
最主要是这段代码,property是班级中studentList对象,column是班级id:用他去装配studentList对象,groupBy是根据传的column去分组装配。resultMap是新定义一个
map放student对象。resultMap="空间名.studentResult",不然可能会找不到这个map错误。
  <result property="studentList" column="id" resultMap="空间名.studentResult"/> </resultMap> student对象 <resultMap class="student" id="studentResult">
<result property="id" column="
student_id" /> <result property="name" column="name" /> <result property="num" column="num" /> </resultMap> <select id="getClasses" parameterClass="classes" resultMap="classesResult">
为student中id重命名,以区分字段重名
 select c.id,c.description,s.id as student_id,s.name,s.num from classes c join student s on s.classes_id = c.id where id = #id# </select>
以上就是ibatis一对多映射解决方案。

参考:http://blog.csdn.net/sanyuesan0000/article/details/21728463

参考:http://blog.csdn.net/Muspelheim/article/details/50485620#comments