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

news/2024/7/10 23:35:10 标签: iBATIS, DAO, .net, XML, Blog

iBatis的多表关联。

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

这里用表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,其余操作差不多,就不写出了。
    ...
    .


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zzcv_/archive/2007/12/25/1966869.aspx


http://www.niftyadmin.cn/n/872404.html

相关文章

02项目运行环境

项目运行环境 环境对项目的影响 事业环境因素&#xff08;EEF&#xff09;&#xff1a;无法控制的部分&#xff0c;指项目团队不能控制的&#xff0c;将对项目产生影响、限制或指令作用的各种条件。这些条件可能来自组织内部或者外部。 组织过程资产&#xff08;OPA&#xff0…

ibatis配置文件的namespace

ibatis的配置文件中有一个命名空间的属性&#xff0c;如<sqlMap namespace"common">&#xff0c;默认情况下这个功能是关闭的。要打开它需要在SqlMapConfig.xml文件中进行配置&#xff1a;<sqlMapConfig><settingscacheModelsEnabled"true"…

ibatis配置详解

ibatis配置详解 ibatis与hibernate都是持久层的额技巧框架&#xff0c;这里看看ibatis的配置&#xff1a;作为自己以后的参考&#xff1a; ibstis的配置重要由两种文件&#xff0c; &#xff08;一&#xff09;有关项目标总体配置&#xff0c;如衔接的数据源&#xff0c;衔接…

# spring重要概念

BeanDefinition 标识Bean定义&#xff0c;Spring根据BeanDefinition来创建Bean对象&#xff0c;BeanDefinition中含有很多描述Bean的属性&#xff0c;BeanDefinition是Spring中非常核心的概念 BeanDefinition中重要的属性 beanClass&#xff1a;表示一个bean的类型&#xff…

ibatis使用总结(转)

SqlMap的配置是iBatis中应用的核心。这部分任务占据了iBatis开发的70的工作量。 1、命名空间&#xff1a; <sqlMap namespace"Account">&#xff0c;在此空间外要引用此空间的元素&#xff0c;则需要加上命名空间名。 2、实体的别名&#xff1a; <typeAl…

03 项目经理角色

项目经理角色 定义&#xff1a;由执行组织委派&#xff0c;领导团队实现项目目标的个人。 项目经理无需承担项目中的每个角色&#xff0c;但应具备项目管理知识、技术知识、理解和经验。通过沟通领导项目团队进行规划和协调。 项目经理影响范围 PPP经理&#xff1a;Public-…

svn介绍

SVN是一种版本管理系统&#xff0c;前身是CVS&#xff0c;是开源软件的基石。即使在沟通充分的情况下&#xff0c;多人维护同一份源代码的一定也会出现混乱的情况&#xff0c;版本管理系统就是为了解决这些问题。 Svn是严格区分大小写的&#xff0c;存储中路径的名字只有大小写…

gitlab+jenkins+harbor+k8s--01gitlab安装

背景 devops相关内容&#xff0c;概念百度 gitlab&#xff1a;代码仓库 jenkins&#xff1a;流水线&#xff0c;协助构建jar包&#xff0c;构建镜像 harbor&#xff1a;镜像仓库 kubernetes&#xff1a;容器编排 需求知识储备&#xff1a; docker&#xff08;入门&#…