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

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

iBatis的多表关联。

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

这里用表lockkey为例,一个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表中保存的lockid实现的一对一关联,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>
  
<!-- 通过lockid实现的一对多关联,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(); }
    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值