一、一对一关系
一对一关系即一对单个对象,下面举例说明:
一对单个对象
例如:
<resultMap id="loadAResult" class="A">
        <result property="id" column="id" />
        <result property="name" column="name" />
        <result property="areaId" column="areaId" />
        <result property="treeChild" column="Aid" select="loadEngineerByParentId" />
    </resultMap>
说明:treeChile为在A对象中自定义的一个属性,主要用来映射获取关联的B对象,用SQL语句来表示的话应该是这样:
select A.id,A.name,A.areaid,B.*  from A,B where A.Aid =B.Bid,treeChild即B.*,此处为获取的单个对象;
二、一对多关系,即一对一个列表
一对多关系与 1 对 1 关系的区别之处在于类中引用的对象为一个列表而非单个对象,因此在 resultmap 中的 mapping 是一样的,唯一的区别在于关联的 select 返回的为一个列表而非单个对象,例如:
1、普通的一对多关系
<resultMap id="loadAResult" class="A">
        <result property="id" column="id" />
        <result property="name" column="name" />
        <result property="areaId" column="areaId" />
        <result property="treeChild" column="Aid" select="loadEngineerByParentId" />
    </resultMap>
resultmap同一对一关系一样,就是返回值为一个列表,多条记录
2、特殊的一对多关系,这里重点说明下这种关系,因为在项目中会遇到很多特殊的情况,并不能单纯用上面的关系来解决,
例如:A表有4个字段:id,name,areaid,aid,与之相关联的B表有3个字段:name,areaid,aid,现在要获得B表的name字段,为了直观,我用SQL语句表示:select name from B where areaid = xxx and aid =xxxx,即需2个字段才能定义一个唯一的name
针对这种情况,我们可以先写出子查询的mapping:
<resultMap id="loadB" class="B"> 
        <result property="name" column="name" />   
    </resultMap>
<select id="loadEngineerByParentId" resultMap="loadEngineer" parameterClass="java.util.HashMap">
        <![CDATA[ SELECT name
                    FROM B  
                    WHERE areaid=#areaid# AND aid=#aid# ]]>
    </select>
再写父查询:
<resultMap id="loadAResult" class="A">
        <result property="id" column="id" />
        <result property="name" column="name" />
        <result property="areaId" column="areaId" />
        <result property="treeChild" column="areaid=areaId,aid=id" select="loadBrByParentId" />
    </resultMap>

Ibatis SqlMap映射关系总结的更多相关文章

  1. 解决com.ibatis.sqlmap.client.SqlMapException: There is no statement named in this SqlMap

    com.ibatis.sqlmap.client.SqlMapException: There is no statement named in this SqlMap. 可能存在3种情况: 1.在x ...

  2. NoClassDefFoundError: com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig处理

    根据老系统拷贝maven依赖新搭建了一个项目,启动抛异常如下: Caused by: java.lang.NoClassDefFoundError: com/ibatis/sqlmap/engine/ ...

  3. ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系

    ASP.NET Core的路由是通过一个类型为RouterMiddleware的中间件来实现的.如果我们将最终处理HTTP请求的组件称为HttpHandler,那么RouterMiddleware中间 ...

  4. Hibernate4.2.4入门(二)——一对多的映射关系

    一.前言 前面我们已经学过hibernate的基础,学会增删改查简单的操作,然而我们数据库中存在着1对多,多对1,多对多的关系,hibernate又是基于ORM基础上的开源框架,可以让我们不用去编写S ...

  5. EF里的继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子

    本章节讲解EF里的继承映射关系,分为TPH.TPT.TPC.具体: 1.TPH:Table Per Hierarchy 这是EF的默认的继承映射关系:一张表存放基类和子类的所有列,自动生成的discr ...

  6. hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系

    前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hi ...

  7. hibernate笔记--单(双)向的多对多映射关系

    在讲单向的多对多的映射关系的案例时,我们假设我们有两张表,一张角色表Role,一张权限表Function,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我 ...

  8. hibernate笔记--基于主键的单(双)向的一对一映射关系

    上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这 ...

  9. hibernate笔记--基于外键的单(双)向的一对一映射关系

    假设我们有两张表,人员信息表Person,和身份信息表IdCard,我们知道每个人只有一个身份证号,所以这里的Person和IdCard表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射 ...

随机推荐

  1. 从极速飞艇源码 VantComponent 谈 小程序维护

    在开发极速飞艇源码详情咨询Q166848365小程序的时候,我们总是期望用以往的技术规范和语法特点来书写当前的小程序,所以才会有各色的小程序框架,例如 mpvue.taro 等这些编译型框架.当然这些 ...

  2. 在没Hadoop 、GP 前提下怎么进行实时数据统计。

    最近着手个项目,整体数据量有5亿多,每个月增量9000w.应用场景是Oltp 根据用户id直接计算各种维度值. 因为是Oltp 场景,直接根据用户id %2000分(方便后续横向扩展),有些喜欢扯分区 ...

  3. 转载:爬虫技术浅析(Python)

    http://drops.wooyun.org/tips/3915 0x00 前言 网络爬虫(Web crawler),是一种“自动化浏览网络”的程序,或者说是一种网络机器人.它们被广泛用于互联网搜索 ...

  4. C/C++内存泄露及检测工具

    内存泄漏的定义   一般我们常说的内存泄漏是指堆内存的泄漏.堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内 存.应用程序一般使用malloc,re ...

  5. windows服务安装记录

    首先打开cmd. 进入这个地址 C:\Windows\Microsoft.NET\Framework\v4.0.30319 执行操作  InstallUtil.exe E:\QueueWinServi ...

  6. 基于ASP.NET MVC 利用(Aspose+Pdfobject.js) 实现在线预览Word、Excel、PPT、PDF文件

    #region VS2010版本以及以上版本源码下载地址:http://download.csdn.net/download/u012949335/10231812 VS2012版本以及以上版本源码下 ...

  7. iOS 添加字体

    1. 将字体(ttf 文件)导入项目. 2. 在项目plist 文件里的 Fonts provided by application 添加新导入的字体. 3. 代码中的调用 [aLabel setFo ...

  8. 音频audio,加层父级

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. ESXi到KVM之v2v迁移

    1.ESXi到KVM之v2v情况说明 (1).配置任务列表: 1)VMwareESXi虚拟平台下linux系统迁移到KVM虚拟平台.2)VMwareESXi虚拟平台下windows系统迁移到KVM虚拟 ...

  10. C#取得控制台应用程序的根目录方法

    如有雷同,不胜荣幸,若转载,请注明 取得控制台应用程序的根目录方法1:Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径2:AppDomain.Curren ...