目前,我在做项目的时候,用到了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>