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表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射 ...
随机推荐
- MSP430 G2553 低功耗模式LPMx
MSP430除了正常运行时的active模式外,还支持五种低功耗模式(Low-power mode),分别为LPM0.LPM1.LPM2.LPM3.LPM4,由状态寄存器中的CPUOFF.OSCOFF ...
- 更改JupyterNotebook默认文件路径 行之有效!
在安装了Anaconda以后浏览器默认打开的是C盘用户目录,平时不想把一些文件.代码放在C盘尤其是用户目录下,所以考虑将默认路径改掉,尝试了网上的几种方法,终于找到了一种可行有效的. 1.找到jupy ...
- oracle中的序列,可以解决自增各种编号自动增长问题,说一下我的小问题。
1.生成0001-9999的编码 //在PL/sql中 创建一个序列 Create sequence seq_cdptIncrement by 1 --自增数Start with 1 --开始累加数M ...
- ASP.NET Core学习总结(3)
我们重点来看看这个InvokeInnerFilterAsync. protected override async Task InvokeInnerFilterAsync() { var next = ...
- Visifire图表
引用DLL: WPFToolkit WPFVisifire.Charts.dll WPFVisifire.Gauges.dll 1.柱状图 代码: public void BindChart1() { ...
- char、varchar、nchar、nvarchar、text的区别
char.varchar.nchar.nvarchar.text的区别 1.有var前缀的,表示是实际存储空间是变长的,varchar,nvarchar 所谓定长就是长度固定的,当输入的数据长度没有达 ...
- Impala源码之资源管理与资源隔离
本文由 网易云发布. 前言 Impala是一个MPP架构的查询系统,为了做到平台化服务,首先需要考虑就是如何做到资源隔离,多个产品之间尽可能小的甚至毫无影响.对于这种需求,最好的隔离方案无疑是物理机 ...
- ASP.NET Core使用NLog记录日志
1.根目录新建nlog.config配置文件 <?xml version="1.0"?> <nlog xmlns="http://www.nlog-pr ...
- mysql--对库,表基本操作语句,增删改查
1.对数据库的操作 1.选择数据库 USE 数据库名 2.创建数据库 create database 数据库名 charset utf8; 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不 ...
- 如何成功导入SlidingMenu库?
SlidingMenu是一个开源的侧滑菜单(https://github.com/jfeinstein10/SlidingMenu). 为大家的安卓程序提供侧滑菜单,这个功能也非常有用. 要想正常使 ...