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

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

    博客分类:
  • ibatis

iBATIS DAO SQL XML
iBatis的多表关联。

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

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

Sql代码   收藏代码
  1. CREATETABLE lock(  

  2.    id int,  

  3.    lockName varchar

  4. );  

  5. CREATETABLEkey(  

  6.    id int,  

  7.    lockId int,  

  8.    keyName varchar

  9. );  

定义映射类

Java代码   收藏代码
  1. package zzcv.dao.domain;  

  2. publicclass Lock  

  3. {  

  4. privateint id;  

  5. private String lockName;  

  6. private Object keys; //这里可以存放一个查询结果List。

  7. publicvoid getId(){  

  8. return..  

  9.        ...  

  10. //省略

  11. }  

  12. package zzcv.dao.domain;  

  13. publicclass Key  

  14. {  

  15. privateint id;  

  16. privateint lockId;  

  17. private String keyName;  

  18. private Object lock; //这里可以存放key匹配的lock。

  19.        ...  

  20. //省略

  21. }  

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

Xml代码   收藏代码
  1. <sqlMapnamespace="test">

  2. <typeAliasalias="Key"type="zzcv.dao.domain.Key"/>

  3. <typeAliasalias="Lock"type="zzcv.dao.domain.Lock"/>

  4. <resultMapid="KeyResult"class="Key">

  5. <resultproperty="id"column="id"/>

  6. <resultproperty="keyName"column="keyName"/>

  7. <resultproperty="lock"column="lockId"select="getLockById"/>

  8. </resultMap>

  9. <!-- 通过key表中保存的lock的id实现的一对一关联,ibatis会使用getLockById(lockId)的结果填充lock属性 -->

  10. <resultMapid="LockResult"class="Lock">

  11. <resultproperty="id"column="id"/>

  12. <resultproperty="lockName"column="lockName"/>

  13. <resultproperty="keys"column="id"select="getKeysByLockId"/>

  14. </resultMap>

  15. <!-- 通过lock的id实现的一对多关联,ibatis会使用getKeysByLockId(id)得到的List填充keys属性 -->

  16. <!-- 多对多可以通过嵌套实现,这里就不列出了 -->

  17. <selectid="selectAllkeys"resultMap="KeyResult">

  18. <![CDATA[  

  19.  select id,lockId,keyName from key

  20.  ]]>

  21. </select>

  22. <selectid="getLockById"parameterClass="int"resultClass="Lock">

  23. <![CDATA[  

  24.  select id,lockName from lock where id = #value#  

  25.  ]]>

  26. </select>

  27. <selectid="selectAllLocks"resultMap="LockResult">

  28. <![CDATA[  

  29.  select id,lockName from lock

  30.  ]]>

  31. </select>

  32. <selectid="getKeyByLockId"parameterClass="int"resultClass="key">

  33. <![CDATA[  

  34.  select id,lockId,keyName from lock where lockId = #value#  

  35.  ]]>

  36. </select>

  37. </sqlMap>


现在可以代码中使用了

   ...
   ..
Java代码   收藏代码
  1. try{  

  2.        Reader reader = Resources.getResourceAsReader("mxd/dao/data/SqlMapConfig.xml");  

  3.        sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);  

  4.        reader.close(); }  

  5. catch(IOException e){  

  6. thrownew RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);}  

  7.    List locks=sqlMapper.queryForList("selectAllLocks");  

  8. //取一个Lock对象。

  9.    Lock lock=(Lock)locks.get(0);  

  10. //从Lock对象取List<Key>。

  11.    List keys=lock.getKeys();  

  12. //示例结束,取到结果了,剩余的一个关联是取对象Lock,其余操作差不多,就不写出了。

  13.    ...  

  14.    .  



你可能感兴趣的:(return,object,package,private,一对一)