首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2013-09-09 
ibatis配置多表关联(一对一、一对多、多对多)iBatis的多表关联。ibatis的表关联,和数据库语句无关,是在程序中

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" 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" 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" parameterresultresultMap="LockResult">     <![CDATA[     select id,lockName from lock  ]]>     </select>         <select id="getKeyByLockId" parameterresultname="code"> ...    ..    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,其余操作差不多,就不写出了。    ...    .

热点排行