iBatis的多表关联。

ibatis的表关联,和数据库语句无关,是在程序中,把若干语句的结果关联到一起。
这种关联形式,虽然在大数据量时是很奢侈的行为,但是看起来很干净,用起来也很方便。

这里用表lock和key为例,一个lock可以配多个key。

CREATE TABLE lock(
    id int,
    lockName varchar
);

CREATE TABLE key(
    id int,
    lockId int,
    keyName varchar
);

定义映射类

package zzcv.dao.domain;

public class Lock
{
    private int id;
    private String lockName;
    private Object keys; //这里可以存放一个查询结果List。
    
    public void getId(){
        return..
        ...
        //省略
}

package zzcv.dao.domain;

public class Key
{
    private int id;
    private int lockId;
    private String keyName;
    private Object lock; //这里可以存放key匹配的lock。
        ...
        //省略
}

表关联通过配置文件的resultMap实现,不需要关联的查询仍可用resultClass

 <sqlMap namespace="test">   
  <typeAlias alias="Key" type="zzcv.dao.domain.Key"/>   
  <typeAlias alias="Lock" type="zzcv.dao.domain.Lock"/>   
    
  <resultMap id="KeyResult" class="Key">   
  <result property="id" column="id"/>   
  <result property="keyName" column="keyName"/>   
  <result property="lock" column="lockId" select="getLockById"/>   
  </resultMap>
  <!-- 通过key表中保存的lock的id实现的一对一关联,ibatis会使用getLockById(lockId)的结果填充lock属性 -->
    
  <resultMap id="LockResult" class="Lock">   
  <result property="id" column="id"/>   
  <result property="lockName" column="lockName"/>   
  <result property="keys" column="id" select="getKeysByLockId"/>   
  </resultMap>
  <!-- 通过lock的id实现的一对多关联,ibatis会使用getKeysByLockId(id)得到的List填充keys属性 -->
  
  <!-- 多对多可以通过嵌套实现,这里就不列出了 -->
  
  <select id="selectAllkeys" resultMap="KeyResult">   
  <![CDATA[   
  select id,lockId,keyName from key
  ]]>   
  </select>   
    
  <select id="getLockById" parameterClass="int" resultClass="Lock">   
  <![CDATA[   
  select id,lockName from lock where id = #value#   
  ]]>   
  </select>
  
  <select id="selectAllLocks" resultMap="LockResult">   
  <![CDATA[   
  select id,lockName from lock
  ]]>   
  </select>   
    
  <select id="getKeyByLockId" parameterClass="int" resultClass="key">   
  <![CDATA[   
  select id,lockId,keyName from lock where lockId = #value#   
  ]]>   
  </select>
 </sqlMap>   

现在可以代码中使用了

);
    //从Lock对象取List<Key>。
    List keys=lock.getKeys();
    //示例结束,取到结果了,剩余的一个关联是取对象Lock,其余操作差不多,就不写出了。
    ...
    .

ibatis配置多表关联(一对一、一对多、多对多)的更多相关文章

  1. mytabits表关联一对一(多对一?)

    mytabits表关联一对一(多对一?) association联合 联合元素用来处理“一对一”的关系.需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别).对 ...

  2. JPA 一对一 一对多 多对一 多对多配置

    1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...

  3. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  4. JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用

    下面把项目中的用户类中有个:一对一  一对多  多对多的注解对应关系列取出来用于学习      说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...

  5. mybatis 一对一 一对多 多对多

    一对一 一对多 多对多

  6. day 69-70 一对一 一对多 多对一联表查询

    day 69 orm操作之表关系,多对多,多对一 多对一/一对多, 多对多{类中的定义方法} day69 1. 昨日内容回顾 1. 单表增删改查 2. 单表查询API 返回QuerySet对象的: 1 ...

  7. mysql表的一对一/一对多/多对多联系

    1.数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多. 2.通过表的关系,来帮助我们怎样建表,建几张表. 一对一 一张表的一条记录一定只能与另外一张表的一条记录进行对应,反 ...

  8. 使用NHibernate(7)-- 一对一 && 一对多 && 多对多

    1, 一对一. 对于数据量比较大的时候,考虑查询的性能,肯能会把一个对象的属性分到两个表中存放:比如用户和用户资料,经常使用的一般是Id和用户名,用户资料(学校,籍贯等)是不经常被查询的,所以就会分成 ...

  9. MySQL一对一:一对多:多对多: 实例!!!!

    学生表和课程表可以多对多 一个学生可以学多门课程 一门课程可以有多个学生: 多对多 *** 一个学生对应一个班级 一个班级对应多个学生: 一对多 *** 一个老师对应多个学生 多个学生对应一个老师:一 ...

随机推荐

  1. [mysql] mysql explain 使用

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 先解析一条sql语句,看出现什么内容 EXPLAINSELECTs.uid, ...

  2. usb由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备

    在设备管理器的usb设备的属性中,显示提示“由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备”.注册表坏了.经过查询,解决方法如下: 方法:打开注册表编辑器(开始--& ...

  3. HTML标签使用特写

    页面定时刷新标签 //页面定时刷新 <meta http-equiv="> Input标记各种特殊用法 <%--禁止鼠标选择内容--%> <input id=& ...

  4. 关于mac mini组装普液晶显示器

    申请了好久的mac mini,部门终于给买下来了.没想到,买回来之后的组装还是折腾了我们一把.  因为先前没用过mac mini,以为它和普通的台式机一样,买回来就能直接到显示器上用了.结果买回来ma ...

  5. 用aauto做游戏修改器

    import win.ui; import process; //以下自动生成,不用看. /*DSG{{*/ ;bottom=) winform.add( button={cls=;top=;righ ...

  6. Objective-C语法汇总

    1.方法前的加减号 Objective-C中是没有public与private的概念的,即可以认为全部都是public.减号表示的是一个函数.方法.消息的开始.加号则表示不需要创建一个类的实例,其他类 ...

  7. DBA_Oracle Database 11g 面向 DBA 和开发人员的重要特性

     2015-01-23 Created By BaoXinjian

  8. PLSQL_性能优化系列19_Oracle Explain Plan解析计划通过Profile绑定

    20150529 Created By BaoXinjian

  9. 0811 css样式表基本

    CSS(Cascading Style Sheets,层叠样式表),作用是美化HTML网页. /*注释*/    注释语法 1. 样式表分类 ①内联样式表 和html联合显示,控制精确,但是可重用性差 ...

  10. python (2)xpath与定向爬虫

    内容来自:极客学院,教学视频: 写在前面: 提取Item 选择器介绍 我们有很多方法从网站中提取数据.Scrapy 使用一种叫做 XPath selectors的机制,它基于 XPath表达式. 这是 ...