以前一直在用着ibatis,但是很少去研究它的一对多,即使用到了也是采用一种很笨重的方法:先用statement读取信息,在手动调用另外的statement跟据关联信息去取值。
现在又两张表:teacher id name number classInfo id number teacherNo 其中teacher和classInfo是1:n,teacher.id = classInfo.teacherNo。
model对象分别声明为:public class Teacher { private int id; private String name; private long number; private List<ClassInfo> classList; set/get方法省略 } public class ClassInfo { private int id; private long number; private logn teacherNo; set/get方法省略 } 。
准备工作完成,我们来看sql.xml文件:
<sqlMap namespace="TeacherInfo"> <typeAlias alias="teacher" type="teacherModel路径"/> <typeAlias alias="classinfo" type="classinfoModel 路径"/> <resultMap id="teacherResult" class="teacher"> <result property="id" colum="id"/> <result property="name" colum="name"/> <result property="number" colum="number"/> <result property="classList" colum="number" select="TeacherInfo.getClassinfoByNum"/> </resultMap> <statement id="getClassinfoByNum" parameterClass="long" resultClass="classinfo"> select id,number,teacherNo from classInfo where teacherNo = #teacherNo# </statement> <statement id="getList" parameterClass="String" resultMap="teacherResult"> select id,name,number from teacher where name = #name# </statement> </sqlMap>
在java文件中取值:
public List getList(String name){ List list = this.getSqlMapClientTemplate().queryForList("TeacherInfo.getList",name); for(int i=0;i<list.size;i++) { Teacher tt =(Teacher)list.get(i); //这里得到的就是教师信息。 for(int j=0;j<tt.getClassList.size();j++) { ClassInfo ci = (ClassInfo)tt.getClassList().get(j); // 这里得到的就是此教师下的班级信息。 } } }
都是项目中用到的知识点,很简单。以资鼓励,聊以共勉。