以前一直在用著ibatis,但是很少去研究它的一對多,即使用到了也是採用一種很笨重的方法:先用statement讀取資訊,在手動調用另外的statement跟據關聯資訊去取值。
現在又兩張表:teacher</p><p>id<br />name<br />numberclassInfo</p><p>id<br />number<br />teacherNo 其中teacher和classInfo是1:n,teacher.id = classInfo.teacherNo。
model對象分別聲明為:public class Teacher<br />{<br /> private int id;<br /> private String name;<br /> private long number;</p><p> private List<ClassInfo> classList;</p><p> set/get方法省略</p><p>}public class ClassInfo<br />{<br /> private int id;<br /> private long number;<br /> private logn teacherNo;</p><p> set/get方法省略<br />} 。
準備工作完成,我們來看sql.xml檔案:
<sqlMap namespace="TeacherInfo"><br /> <typeAlias alias="teacher" type="teacherModel路徑"/><br /> <typeAlias alias="classinfo" type="classinfoModel 路徑"/></p><p> <resultMap id="teacherResult" class="teacher"><br /> <result property="id" colum="id"/><br /> <result property="name" colum="name"/><br /> <result property="number" colum="number"/><br /> <result property="classList" colum="number"<br /> select="TeacherInfo.getClassinfoByNum"/><br /> </resultMap></p><p> <statement id="getClassinfoByNum" parameterClass="long" resultClass="classinfo"><br /> select<br /> id,number,teacherNo<br /> from<br /> classInfo<br /> where<br /> teacherNo = #teacherNo#<br /> </statement></p><p> <statement id="getList" parameterClass="String" resultMap="teacherResult"></p><p> select<br /> id,name,number<br /> from<br /> teacher<br /> where<br /> name = #name#</p><p> </statement></p><p></sqlMap>
在java檔案中取值:
public List getList(String name){</p><p> List list = this.getSqlMapClientTemplate().queryForList("TeacherInfo.getList",name);<br /> for(int i=0;i<list.size;i++)<br /> {<br /> Teacher tt =(Teacher)list.get(i);<br /> //這裡得到的就是教師資訊。<br /> for(int j=0;j<tt.getClassList.size();j++)<br /> {<br /> ClassInfo ci = (ClassInfo)tt.getClassList().get(j);<br /> // 這裡得到的就是此教師下的班級資訊。<br /> }<br /> }</p><p>}
都是項目中用到的知識點,很簡單。以資鼓勵,聊以共勉。