`
pan_java
  • 浏览: 286233 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ibatis配置多表关联(一对一、一对多、多对多)

阅读更多
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>
  
现在可以代码中使用了

    ...
    ..
   
try{
        Reader reader = Resources.getResourceAsReader("mxd/dao/data/SqlMapConfig.xml");
        sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
        reader.close(); }
    catch(IOException e){
        throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);}

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


分享到:
评论
1 楼 happenZheng 2011-04-20  
你好,我想问下,那么,对于多对一这种情况呢?
假如,我现在有一把钥匙,那我想知道,与这把钥匙对应的锁的信息?那我该怎么办呢?在配置文件时跟查询语句都应该怎么写???

相关推荐

    ibatis配置多表关联(一对一、一对多、多对多

    ibatis配置多表关联(一对一、一对多、多对多

    ibatis 一对多 多对多完整映射

    本文将深入探讨如何在iBATIS中实现一对多和多对多的关系映射,并提供相关的源码分析和工具使用技巧。 **一对多关系映射** 在数据库设计中,一对多关系是指一个父记录可以与多个子记录关联,例如,一个用户可以有多...

    Mybatis/ibatiS多表映射 一对一 一对多 extjs前台取值 详细讲解

    总结来说,这个话题覆盖了Mybatis/iBatis中的多表映射,通过XML配置文件处理一对一和一对多关系,以及如何在ExtJS前端通过Model和Grid获取并展示这些数据。了解这些知识对于开发涉及多表交互的应用至关重要,能够...

    ibatis实战之一对多关联(源代码)

    本篇将聚焦于iBatis的一对多关联映射实战,帮助开发者更好地理解和运用这一特性。 在关系型数据库中,一对多关联是非常常见的一种数据关系,例如一个用户可以拥有多个订单,一个部门可以包含多个员工等。在iBatis中...

    ibatis多对多关系(详细)

    在本文档中,我们将详细介绍iBatis在处理多对多关系时的配置和实现。 多对多关系 多对多关系是一种常见的关系数据库设计模式,用于描述两个实体之间的多对多关系。在本例中,我们将使用学生(Student)和教师...

    ibatis 一对多

    一对多映射是数据库关系模型中的常见概念,指的是一个父表(如部门表)可以对应多个子表(如员工表),每个部门可以有多个员工。在`iBatis` 中,我们可以利用映射文件来配置这种关系,以便在查询时自动处理关联数据...

    ibatis多表查询

    在Ibatis中,多表查询是一项重要的功能,它允许我们处理复杂的数据库操作,例如一对多、多对一或一对一的关系。在这个例子中,我们将探讨如何使用Ibatis进行一对多的多表查询,以`book`和`user`两个表为例。 首先,...

    ibatis 一对多关系映射

    这样,当我们调用`SqlSession`的`selectList`方法执行这个查询时,Ibatis会自动将返回的多条记录按照一对多的关系映射成`User`对象,每个`User`对象都有一个包含所有关联订单的`orderList`。 此外,还可以通过使用`...

    Ibatis多表查询

    为了演示Ibatis的多表查询功能,本文档采用了一个简单的例子:一个图书 (`book`) 表和一个用户 (`user`) 表,其中图书表与用户表之间存在一对多的关系。这意味着每本书可以有多个作者。 **图书表 (`book`) 结构:** ...

    ibatis的的增删改查和一对一、一对多查询

    在SQL查询中,可以使用嵌套选择(`&lt;select&gt;`标签)或者联合主键(`&lt;join&gt;`标签)来关联一对一的表。 2. **一对多关系**:在一个实体类中,可能存在与多个其他实体类的关系,如一个用户有多个订单。同样,使用`...

    使用ibatis操作两个有关系的表

    在处理两个有关系的表时,Ibatis提供了多种策略,如一对一、一对多、多对一、多对多等映射关系。 1. **一对一映射**:当两个表之间存在一对一关系时,例如用户表和用户详细信息表,一个用户对应一条详细信息。在...

    ibatis配置文件

    配置文件中的`&lt;settings&gt;`标签包含了多个关键参数,它们控制着ibatis的行为特性: - `cacheModelsEnabled`: 控制是否启用缓存模型。设置为`true`表示启用缓存。 - `enhancementEnabled`: 控制是否对POJO进行增强,...

    ibatis配置文件模板

    - `&lt;resultMap&gt;`:定义复杂对象的映射,可以处理一对一、一对多、多对一等关联关系。 在实际开发中,Ibatis允许通过动态SQL来构建灵活的查询,比如`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;where&gt;`、`...

    ibatis多表查询过程

    在数据库设计中,多表查询通常涉及到表之间的关联,例如一对一、一对多、多对多关系。在iBatis中,我们可以使用`&lt;select&gt;`标签来定义多表查询的SQL语句。 ### 3. 使用`&lt;include&gt;`标签 为了保持SQL语句的整洁和可...

    ibatis 完美例子 一对多 批处理 事务 和 spring struts2集成

    在Java代码中,通过MyBatis的SqlSession对象加载或保存相关的对象,Ibatis会自动处理一对多的关联填充和删除规则。 接着,批处理操作是提高性能的关键。在Ibatis中,可以通过设置SqlSession的flushCache和useCache...

    主子表查询ibatis

    在iBATIS中,处理这种一对多关系的关键在于配置映射文件,确保数据能够正确关联并检索出来。 1. **iBATIS主子表查询配置**: 在iBATIS的映射文件(XML配置文件)中,我们需要定义两个Mapper:一个是主表的Mapper,...

    ibatis配置

    它可以处理复杂的数据类型映射,包括一对一、一对多、多对一等关联关系。 7. **动态SQL**: Ibatis的一大特色,允许在XML中直接写SQL,可以进行条件判断、循环等复杂的逻辑操作,使得SQL更加灵活和可维护。 8. **...

    ibatis one to many mapping

    3. `ibatis配置多表关联(一对一、一对多、多对多).htm` - 这个文件涵盖了多种关联映射,包括一对一、一对多和多对多,可能是全面的关联配置教程。 4. `ibatis多对多映射.htm` - 又一份多对多映射的详细说明。 5. `...

    spring+ibatis 多表

    例如,如果存在一个用户表和订单表,它们之间可能有一对多的关系,即一个用户可以有多个订单。在iBatis中,可以通过JOIN操作实现多表查询,将相关数据一次性加载到内存中。Spring的JdbcTemplate或MyBatis的...

Global site tag (gtag.js) - Google Analytics