ibaties 一对多封装

公司用ibaties 刚开始还以为一样。后来拿mybaties标签放进去 ibaties完全不认啊。这样一对多怎么办啊 没有connections啊 找了一些http://blog.csdn.net/zzcv_/article/details/1966869

提供的方法还是很满意的。


但是有一个地方致命啊

若是数据量稍微大点 5w再网上 这跟for循环有啥区别啊。是吧数据库往死里整啊。


 <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> 



后来又看到一个封装办法 http://cuishen.iteye.com/blog/544207 这种效率要高很多。

这样只用查询一条即可 注意数据量不能过多




  1. <sqlMap namespace="sys">  
  2.     <typeAlias alias="menu" type="com.cuishen.sqlmaptest.vo.Menu" />  
  3.     <resultMap id="sub-menu-map" class="menu">  
  4.         <result property="id" column="subid" />  
  5.         <result property="name" column="subname" />  
  6.         <result property="url" column="suburl" />  
  7.         <result property="layer" column="sublayer" />  
  8.         <result property="grade" column="subgrade" />  
  9.         <result property="position" column="subposition" />  
  10.         <result property="parentId" column="subparentid" />  
  11.     </resultMap>  
  12.     <resultMap id="menu-map" class="menu" groupBy="id">  
  13.         <result property="id" column="id" />  
  14.         <result property="name" column="name" />  
  15.         <result property="url" column="url" />  
  16.         <result property="layer" column="layer" />  
  17.         <result property="grade" column="grade" />  
  18.         <result property="position" column="position" />  
  19.         <result property="parentId" column="parentid" />  
  20.         <result property="subMenus" resultMap="sys.sub-menu-map" />  
  21.     </resultMap>  
  22.   
  23.     <select id="getTopMenu" parameterClass="java.util.HashMap" resultMap="sys.menu-map">  
  24.     select   
  25.     t.id as id,t.name as name,t.url as url,t.layer as layer,t.grade as grade,t.position as position,  
  26.     t.parentid as parentid,s.id as subid,s.name as subname,s.url as suburl,s.layer as sublayer,  
  27.     s.grade as subgrade,s.position as subposition,s.parentid as subparentid  
  28.     from menu t left join menu s  
  29.     on t.id = s.parentid  
  30.     where t.layer=1 order by t.position, s.position  
  31.     </select>  
  32. </sqlMap>  
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值