Ibatis SqlMap映射关系总结
一、一对一关系
一对一关系即一对单个对象,下面举例说明:
一对单个对象
例如:
<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映射关系总结的更多相关文章
- 解决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 ...
- NoClassDefFoundError: com/ibatis/sqlmap/engine/transaction/external/ExternalTransactionConfig处理
根据老系统拷贝maven依赖新搭建了一个项目,启动抛异常如下: Caused by: java.lang.NoClassDefFoundError: com/ibatis/sqlmap/engine/ ...
- ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
ASP.NET Core的路由是通过一个类型为RouterMiddleware的中间件来实现的.如果我们将最终处理HTTP请求的组件称为HttpHandler,那么RouterMiddleware中间 ...
- Hibernate4.2.4入门(二)——一对多的映射关系
一.前言 前面我们已经学过hibernate的基础,学会增删改查简单的操作,然而我们数据库中存在着1对多,多对1,多对多的关系,hibernate又是基于ORM基础上的开源框架,可以让我们不用去编写S ...
- EF里的继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子
本章节讲解EF里的继承映射关系,分为TPH.TPT.TPC.具体: 1.TPH:Table Per Hierarchy 这是EF的默认的继承映射关系:一张表存放基类和子类的所有列,自动生成的discr ...
- hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系
前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hi ...
- hibernate笔记--单(双)向的多对多映射关系
在讲单向的多对多的映射关系的案例时,我们假设我们有两张表,一张角色表Role,一张权限表Function,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我 ...
- hibernate笔记--基于主键的单(双)向的一对一映射关系
上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这 ...
- hibernate笔记--基于外键的单(双)向的一对一映射关系
假设我们有两张表,人员信息表Person,和身份信息表IdCard,我们知道每个人只有一个身份证号,所以这里的Person和IdCard表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射 ...
随机推荐
- Tempdb--Allocation Bottleneck
Alloctaion bottleneck refers to contention in the system pages that store allocation structures. PFS ...
- JQuery中DOM操作(一)
节点操作 1.插入节点,在JQuery中插入的节点方法很多,可以满足各种不同的节点插入的情况,根据不同的插入方式分为:增加环绕节点.节点内部插入和外部插入三种方式 今天我们要讲的是增加环绕节点,它有三 ...
- asp.net 类头部描述
这里教大家怎么在新建类的时候默认有头部描述,先看效果: 像这样的内容我们要怎么进行添加呢? 前方高能...... 找到VS的安装目录-->比如我自己的安装目录D:\VS2013\Common7\ ...
- c# 后台GET、POST、PUT、DELETE传输发送json数据
一.Get 方式传输 //url为请求的网址,param参数为需要查询的条件(服务端接收的参数,没有则为null) //返回该次请求的响应 public string HttpGet(string u ...
- Websphere中获取项目下.properties路径
一:如果容器为Websphere,那下面为红色的地方不能加"/",如果为tomcat,则加上"/", String path = this.class.get ...
- Android优化之内存优化倒计时篇
本文来自网易云社区 作者:聂雷震 本篇文章介绍的内容是如何在安卓手机上实现高效的倒计时效果,这个高效有两个标准:1.刷新频率足够高,让用户觉得这个倒计时的确是倒计时,而不是幻灯片:2.不能占用太多的内 ...
- 安装zlib的过程(Compression requires the (missing) zlib module)(Python2.6升级为2.7出现的问题)
觉得有必要把解决问题的过程写下来 1,因为要安装flask,所以安装pip,所以安装setuptools,所以安装zlib.(具体过程http://www.cnblogs.com/aiyr/p/726 ...
- PHP错误——Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)
解释是可用内存已耗尽,这关系到PHP的memory_limit的设置问题. 这里有两种方法解决 1.修改php.ini memory_limit = 128 打开终端输入下列bash命令 cd /pr ...
- 常用的re正则
常用的正则表达式: 用户名:/^[a-z0-9_-]{3,16}$/ 密码:/^[a-z0-9_-]{6,18}$/ 十六进制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/ 电子邮 ...
- 洛谷P2523 [HAOI2011]Problem c(计数dp)
题面 luogu 题解 首先,显然一个人实际位置只可能大于或等于编号 先考虑无解的情况 对于编号为\(i\),如果确认的人编号在\([i,n]\)中数量大于区间长度,那么就无解 记\(S[i]\)表示 ...