目前,我在做项目的时候,用到了spring + struts2 +ibatis 框架。平时用到的都是一张简单的表,来进行数据的增、删、改、查。而现在突然需要用到其它的一张表,或多张表进行联接查询,那么,在这种情况下,在xml映射文件中,就不能像单张表映射那样。 那么,我们需要怎么处理呢?
下面我就简单的来说明一下:
1、假如我数据库中有两张表:topo表和device表;
2、它们分别对应两个实体类:Topo.class和Device.class
3、我们需要做的就是把这两个实体类再整合出一个联合的实体类:TopoDeviceUnion.class(Topo.class和Device.class的联合实体类),这个实体类中的属性,就是你在联接查询时能够用到的全部字段。
4、在xml映射文件中把TopoDeviceUnion.class中所有的属性全部都加进去。
代码实现如下:
Topo.class
public class Topo {
private String id;
private String name;
private String ....;
private Integer....;
.
.
.
(省略其它的属性)
//get方法、set方法...
}
Device.class
<pre name="code" class="java">public class Device{
private String loopbackIp;
private String deviceModel;
private String ....;
private Integer....;
.
.
.
(省略其它的属性)
//get方法、set方法...
}
TopoDeviceUnion.class
public class TopoDeviceUnion{
private String id;
private String name;
private String lookbackIp;
private String deviceModel;
//get方法、set方法...
}
xml映射文件
<pre name="code" class="java"><?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="topodevice">
<resultMap class="TopoDeviceUnion" id="resultMap_queryAllTopoDevice">
<result property="id" column="id" jdbcType="varchar"/>
<result property="name" column="name" jdbcType="varchar"/>
<result property="loopbackIp" column="loopback_ip" jdbcType="varchar"/>
<result property="deviceModel" column="device_model" jdbcType="varchar"/>
</resultMap>
<select id="queryAllTopoDevice" parameterClass="TopoDeviceUnion" resultMap="resultMap_queryAllTopoDevice">
select b.id,b.name,a.loopback_ip,a.device_model from device a,topo b where a.device_id=b.device_id;
</select>
</sqlMap>