二张表分别为用户表(users)和贴子表(notes),其中users中的userid是notes表的外键,users跟notes是一对多,多对一关系,由myEclpise自动生成映射文件
Users.hbm.xml
- ......
-
- <set name="noteses" inverse="true">
- <key>
- <column name="userid" not-null="true" />
- </key>
- <one-to-many class="com.note.model.Notes" />
- </set>
-
- .....
......<set name="noteses" inverse="true"><key><column name="userid" not-null="true" /></key><one-to-many class="com.note.model.Notes" /></set>......
Notes.hbm.xml
- ......
-
- <many-to-one name="users" class="com.note.model.Users" fetch="select">
- <column name="userid" not-null="true" />
- </many-to-one>
-
- ......
......<many-to-one name="users" class="com.note.model.Users" fetch="select"><column name="userid" not-null="true" /></many-to-one>......
注意:如果
多表查询,在写HQL语句时取notes的userid字段不能写notes.userid(这个问题下午我查了好久,才找到原因的)
HQL语句:From Notes notes,Users users WHERE
notes.users=users.userid AND notes.issubject=1
又一注意点:该查询结果为存放对象数组的list集,可以用以下代码测试
- page=ins.listSubjects(page);//page是我的分页类,并存放了查询后的返回结果
- List list=page.getResult();
- System.out.println(page.getPageToolBar());
- for(int i=0;i<list.size();i++){
- Object[] obj=(Object[])list.get(i);
- for(int j=0;j<obj.length;j++){
- if(obj[j] instanceof Notes){
- Notes note=(Notes)obj[j];
- System.out.print(note.getTitle());
-
- }else if(obj[j] instanceof Users){
- Users user=(Users)obj[j];
- System.out.print(user.getUsername());
- }
- }
- System.out.println();
- }
page=ins.listSubjects(page);//page是我的分页类,并存放了查询后的返回结果List list=page.getResult();System.out.println(page.getPageToolBar());for(int i=0;i<list.size();i++){Object[] obj=(Object[])list.get(i);for(int j=0;j<obj.length;j++){if(obj[j] instanceof Notes){Notes note=(Notes)obj[j];System.out.print(note.getTitle());}else if(obj[j] instanceof Users){Users user=(Users)obj[j];System.out.print(user.getUsername());}}System.out.println();}
在jsp页面显示结果的时候我觉得用EL表达式会简单的多,如:
- <logic:present name="subjects">
- <table width="100%" border="1" rules="rows" frame="below" cellpadding="5" cellspacing="0" bordercolorlight="#6C7BA6" bordercolordark="#ffffff" bgcolor="#DEEFFF" class="DoubleColorTable">
- <logic:present name="subjects" property="result">
- <logic:iterate id="objs" name="subjects" indexId="number" property="result">
- <tr>
- <td>
- <html:link page="/listFollow.do?method=listFollow&subjectId=${objs[0].noteid}" styleId="link001">
- 主题:${objs[0].title}
- </html:link>
- </td>
- <td>
- 作者:${objs[1].username}
- </td>
- <td>
- 发贴时间:${objs[0].addtime}
- </td>
- </tr>
- </logic:iterate>
- </logic:present>
- </table>
- <bean:write name="subjects" property="pageToolBar" filter="false" />
- </logic:present>
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。