ibatis传递任意参数的多表查询方法有哪些?

 我来答
fbikingscom
2011-05-04 · 超过21用户采纳过TA的回答
知道答主
回答量:168
采纳率:100%
帮助的人:40.6万
展开全部
如何定义多表查询
1)
添加Guojia.java类,只是一个普通的javabean,对应guojia表中各字段,及其setter,getter,无须像hibernate一样设置对应关系。
2)
添加guojia.xml,只须添加:

view plaincopy to clipboardprint?
<sqlMap namespace="Guo">
<typeAlias type="com.coship.dhm.iepgm.admin.entity.Guojia" alias="Guo" />
<resultMap id="GuoResult" class="Guo" >
<result column="gid" property="gid" />
<result column="userid" property="userid" />
<result column="gname" property="gname" />
</resultMap>
</sqlMap>
<sqlMap namespace="Guo">
<typeAlias type="com.coship.dhm.iepgm.admin.entity.Guojia" alias="Guo" />
<resultMap id="GuoResult" class="Guo" >
<result column="gid" property="gid" />
<result column="userid" property="userid" />
<result column="gname" property="gname" />
</resultMap>
</sqlMap>

无须添加如查询之类的东西。
3)
在当前类hwj.java添加连合查询的表guojia的list属性,如下:
view plaincopy to clipboardprint?
private List<Guojia> guoList;
public List<Guojia> getGuoList() {
return guoList;
}
public void setGuoList(List<Guojia> guoList) {
this.guoList = guoList;
}
private List<Guojia> guoList;
public List<Guojia> getGuoList() {
return guoList;
}
public void setGuoList(List<Guojia> guoList) {
this.guoList = guoList;
}

4)
在当前表hwj.xml的resultMap中,添加<result property="guoList" resultMap="Guo.GuoResult"/>,如下:
view plaincopy to clipboardprint?
<resultMap id="HwjResult" class="Hwj">
<result column="staff_id" property="id" />
<result column="longinName" property="loginName" />
<result column="password" property="password" />
<result column="staff_name" property="username" />
<result column="status" property="status" />
<result column="phone" property="phone" />
<result column="email" property="email" />
<result property="guoList" resultMap="Guo.GuoResult"/>
</resultMap>
<resultMap id="HwjResult" class="Hwj">
<result column="staff_id" property="id" />
<result column="longinName" property="loginName" />
<result column="password" property="password" />
<result column="staff_name" property="username" />
<result column="status" property="status" />
<result column="phone" property="phone" />
<result column="email" property="email" />
<result property="guoList" resultMap="Guo.GuoResult"/>
</resultMap>

注意:resultMap="Guo.GuoResult"中的Guo对应上面guojia.xml中的namespace,GuoResult对应其resultMap的名.
5)
在sqlMapClient.xml导入guojia.xml
注意:
在resultMap中列出的各列,只能是select的各字段。不能多,也不能少。否则出错。
如:A表中有a,b两列。现select a from A。则resultMap只能列了关于a的列名—属性,不能多列b的东西,否则出错。

6)
若为三表连合查询,
1.对于第三个表的设置,跟上面设置第二个表一样。
2.同样,也只须在hwj.java,hwj.xml中进行相同的设置即可。
说明:
在页面显示时:
在hwj循环记录的iterator中,添加guojia,address各种的循环即可。
无须将address内嵌在guojia中:因为实际上hwj的查询语句查询出来是所有记录,guojia,address添加的循环,也只能循环一次,取一个值。
设置如下:
view plaincopy to clipboardprint?
<%-- guojia --%>
<td width="20%">
<s:iterator value="#user.guoList" status="index1" id="l">
<%-- <s:property value="#index1.index"/> --%>
<s:property value="gname" />
</s:iterator></td>
<%-- address --%>
<td width="20%">
<s:iterator value="#user.addressList" status="index1" id="l">
<%-- <s:property value="#index1.index"/> --%>
<s:property value="address" />
</s:iterator></td>
<%-- guojia --%>
<td width="20%">
<s:iterator value="#user.guoList" status="index1" id="l">
<%-- <s:property value="#index1.index"/> --%>
<s:property value="gname" />
</s:iterator></td>
<%-- address --%>
<td width="20%">
<s:iterator value="#user.addressList" status="index1" id="l">
<%-- <s:property value="#index1.index"/> --%>
<s:property value="address" />
</s:iterator></td>

(3)
resultMap中的的列与javaBean属性的对应关系,只能列出sql语句中select的字段,不能多也不能少,否则出错.----不关心sql语句中关联几个表.如下:
view plaincopy to clipboardprint?
<resultMap id="DevTypeResult" class="DevType">
<result column="Spec_Code" property="specCode" />
<result column="Spec_Name" property="specName" />
<result column="Vendor" property="vendor" />
<result column="Brand" property="brand" />
<result column="Model" property="model" />
</resultMap>

<select id="DevType.findNoChoiceDevTypeById" parameterClass="java.lang.String" resultMap="DevTypeResult">
SELECT distinct d.*
FROM T_App_Info a, T_Device_Spec d, T_App_Spce_R_Info r
WHERE a.App_ID=r.App_ID
AND r.Spec_Code!=d.Spec_Code
AND a.App_ID=#appId#
ORDER BY d.Spec_Code;
</select>
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式