ibatis中多表联接查询



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

这样就完成了 ,这是两张表的联接查询 ,多张表查询和这相同,希望能给大家带来帮助。 有什么不明白的地方,或者是有更好的办法可以互相交流。

时间: 2024-10-30 01:19:21

ibatis中多表联接查询的相关文章

asp.net-微软最新版本ASP.NET的框架是否不完全支持SQL多表联接查询?

问题描述 微软最新版本ASP.NET的框架是否不完全支持SQL多表联接查询? 问题是这样的,我需要查询SQL数据库中多个表的字段,SQL查询语句如下式样: select t1.coid,t1.coname,t1.tel,t2.regid... from t1,t2,t3 where t1.coid=t2.regid and t1.userid='"+ userid+"' 试了很多次都报错说数据控件中没有't1'这样的属性. 我在网上搜索了一下,也有很多人说不支持这样的多表联接查询,只支

ibatis中如何实现动态查询

问题描述 ibatis中如何实现动态查询 解决方案 <if test="memeberID != null }"> ****** </if> 可以嵌套入SQL

Yii2中多表关联查询hasOne hasMany的方法

表positionContent id position_id content_title content_id is_recommend list_sort update_time create_time 10 14 大成成长 160910 1 1 2017-02-09 11:51:56 2017-02-09 11:51:56 11 15 创新成长 160910 1 1 2017-02-09 11:52:08 2017-02-09 11:52:08 position表 id name titl

MySQL中两表UNION查询实例介绍

一,union查询用法 union查询比较简单,就好像把两张表合并了,字段也合成一块 假如是 select * from table1, table2 的话,两个的相同的字段不会合并但 select a1 from table1 union select a1 from table2 这样的话就可以把两个表的a1合成一个 上面不知道你看明白了,没有我们接着看实例 一使用SELECT子句进行多表查询 SELECT 字段名 FROM 表1,表2 - WHERE 表1.字段 = 表2.字段 AND 其

SQL中多表联结查询的效率笔记

最近做网站的时候遇到一个问题,我需要输出B表和C表中的两个字段,不过纠结的是,程序所得到的参数是A表中的id,而A表与B表及C表关联的是另一个字段.如此一来,我就需要从3个表中读取数据,刚开始我想用SQL的多表联结查询,可是又担心效率太低.如果我先读出A表中与B.C关联的字段的值,再运行另一条SQL语句使用该值读取B.C表中的值效率是否会高一些?思索良久,最终决定写一个程序来测试. 以下代码以Discuz!X2.5的数据库为例,查询tid为1的主题发表者的username.  代码如下 复制代码

RDIFramework.NET中多表关联查询的分页实例

RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为指导思想,作为异质系统整合与互操作性.分布式应用提供了可行的解决方案. 分页非常的常见,基本任何项目都会涉及到分页,这没什么好谈的,大多数我们分页对单表的分页比较多,对多表的分页我们可以通过视图来实现,当然还有其他的方式,在这儿,我以一个实例展示下使用我们的RDIFramework.NET来实现多表联合查询分页的实现,我以Web的形式展示,WinForm方

【SQL】在SQL Server中多表关联查询问题

好久没有写SQL语句的多表连接查询,总在用框架进行持久化操作.今天写了一个多表关联查询,想根据两个字段唯一确定一条数据   失败的案例如下: SELECT cyb.id,ad.name FROM [GeneShop].[dbo].[t_member_cyb] cyb ,[GeneShop].[dbo].xx_admin ad,[GeneShop].[dbo].t_bg bg where cyb.hzjg_id = ad.id and cyb.id = bg.cyb_id and (cyb.cyb

Yii2中使用join、joinwith多表关联查询_php实例

表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name customer_id book_id) 图书表 (id book_name author_id) 作者表 (id author_name) 模型定义 下面是这4个个模型的定义,只写出其中的关联 Customer class Customer extends \yii\db\ActiveRecord { // 这是获取客户的订单,由上面我们

几种MySQL中的联接查询操作方法总结_Mysql

前言 现在系统的各种业务是如此的复杂,数据都存在数据库中的各种表中,这个主键啊,那个外键啊,而表与表之间就依靠着这些主键和外键联系在一起.而我们进行业务操作时,就需要在多个表之间,使用sql语句建立起关系,然后再进行各种sql操作.那么在使用sql写出各种操作时,如何使用sql语句,将多个表关联在一起,进行业务操作呢?而这篇文章,就对这个知识点进行总结. 联接查询是一种常见的数据库操作,即在两张表(多张表)中进行匹配的操作.MySQL数据库支持如下的联接查询:     CROSS JOIN(交叉