`
joy_cz
  • 浏览: 136779 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

IBatis--利用映射文件描述对象间的关系

阅读更多
 

映射两表之间的关系通过两个<resultMap>和两个<statement>元素来完成,用VO来描述两表之间的关系在IBatis框架中,其实仍然是通过SQL来完成的。

怎样用SQL来表达“一对多”和“多对一”的关系呢?可以利用主表的主键作为从表的外键对从表查询,得到的结果就是“一对多”的关系。那么“多对一”呢?可以利用从表的外键对主表进行查询,只能得到惟一的一条记录。因此,必须首先做两个SQL

1. SQL描述关系

<statement id=”getAttackSolution”

           parameterClass=”String”

           resultMap=”get-attackSolution-result”>

         select *

from fw_attacksolution

where parents_attack_event_code = #parents_attack_event_code#

</statement>

<statement id=”getPattackDocument”

           parameterClass=”String”

           resultMap=”get-pattackDocument-result”>

         select *

from attack_document_parents

where parents_attack_event_code = #parents_attack_event_code#

</statement>

利用<statement>元素来完成两句SQL语句,id为“getAttackSolution”的一句,表示根据attack_document_parents表的主键到fw_attacksolution表中进行查询,得到的是多条fw_attacksolution表中的记录,这就是“一对多”的关系描述。id为“getPattackDocument”的一句代码,是根据parents_attack_event_code字段到attack_document_parents表中进行查询,由于parents_attack_event_code字段是attack_document_parents表的主键,所以查询结果必然只有一条,那这就可以表示“一对一”的关系。

2. 关系的对应

接着需要将这些SQL映射到对象上去。在PattackDocument VO中有一个变量属性的类型为List,名为attackSolution,它表示了多个AttackSolution VO的集合,那么这在SQL映射到对象的<resultMap>元素中怎么表示呢?请看下面的代码:

<resultMap id=”get-pattackDocument-result”

           class=”struts.sample.cap11.sample1.entity.PattackDocument”>

         <result property=”parents_attack_event_code” column=”parents_attack_event_code”/>

         <result property=”pattack_mean” column=”pattack_mean”/>

         <result property=”attackSolution”

column=”parents_attack_event_code” select=”getAttackSolution”/>

</resultMap>

和没有关系对应的<resultMap>元素相比,多了一个select属性,这个select属性在关系映射中的作用非常大,通过select属性指定的标识可以惟一找到一句查询SQL,而这句查询SQL就表达了“一对多”的关系。这段代码的解释可以是这样的:如果有查询返回的是“get-pattackDocument-result”所指定的VO,当将结果集写入VO的变量属性时,得到一个JDBC无法识别的List类型。于是底层框架就会查找select属性所指定的查询SQL语句。运行这个子查询,并将子查询的结果集写入List,返回到VO的变量属性attackSolution中。

AttackSolution VO中还有一个pattackDocument的变量属性,它的类型是PattackDocument,同样也可以用<result>元素来声明。

<resultMap id=”get-attackSolution-result”

           class=”struts.sample.cap11.sample1.entity.AttackSolution”>

         <result property=”attack_event_code” column=”attack_event_code”/>

         <result property=”attack_mean” column=”attack_mean”/>

         <result property=”attack_action” column=”attack_action”/>

         <result property=”parents_attack_event_code” column=”parents_attack_event_code” />

         <result property=”pattackDocument”

column=”parents_attack_event_code” select=”getPattackDocument”/>

</resultMap>

它的工作方式和之前所描述的没有差别,惟一的区别是select属性所指定的查询SQL语句查询结果必然是一条记录,即一个对象实例。

可见,select属性所指定的查询SQL既可以是一个集合,也可以是一个对象。

分享到:
评论

相关推荐

    ibatis-2.3.

    2. **Data Mapper API**: 这是 iBATIS 提供的主要接口,允许开发者通过编程方式执行 SQL 映射文件中的查询。主要的接口包括 `SqlMapClient` 和 `SqlSession`,它们负责与数据库交互。 3. **Parameter Mapping**: ...

    ibatis-sqlMap相关参考

    1. **Ibatis框架概述**:理解Ibatis的核心概念,包括SQL映射文件、SqlSessionFactory和SqlSession的作用。 2. **SQLMap配置**:学习如何编写SqlMapConfig.xml,配置数据源、事务管理器以及日志设置。 3. **SQL映射...

    iBATIS-SqlMaps-2-Tutorial

    iBATIS-SqlMaps允许开发者直接编写SQL语句,这意味着可以利用SQL的强大功能来处理复杂的查询需求,同时也提供了更少的限制,例如表每类、多表每类或多类每表等关系。 ### 三、准备使用SQLMaps 在开始使用SQLMaps...

    iBATIS-3-User-Guide.pdf

    - iBATIS 不像其他 ORM(对象关系映射)框架那样完全将 SQL 语句封装在框架内部,而是允许开发者直接编写 SQL 语句,并提供了灵活的参数映射和结果集映射机制。 #### 二、开始使用 iBATIS - **构建 ...

    ibatis-sqlMap

    ibatis-sqlMap,也称为iBATIS DataMapper,是一个用于简化数据库访问的框架,它通过使用简单的XML描述符将Java对象映射到SQL语句上。本文档旨在提供一个全面的指南,帮助开发人员理解并有效利用ibatis-sqlMap的功能...

    iBATIS-3开发指南

    它通过将SQL语句封装为配置文件,并利用映射器(Mappers)来关联Java对象与数据库表,从而实现了数据访问的自动化。iBATIS的核心设计理念是提供一种轻量级的解决方案,避免了ORM(对象关系映射)框架可能带来的复杂...

    iBATIS-SqlMaps-2_en

    与其它框架和对象关系映射工具相比,iBATIS的学习曲线较平缓,用户只需熟悉JavaBeans、XML和SQL即可上手,无需掌握复杂的模式或概念。 ### 安装与升级 文档中提到的安装过程并未详细展开,但通常包括将iBATIS库...

    ibatis jar文件

    这些JAR文件在Java项目中作为依赖使用,可以构建一个基于iBATIS或MyBatis的数据访问层,同时利用如Log4j进行日志记录,以及通过CGlib进行动态代理和对象创建。每个组件都有其特定的作用,共同构成了一个完整的数据库...

    大家快来学ibatis--基础

    【描述】:“ibatis是种不错的技术,大家都来看看吧!” Ibatis,全称MyBatis,是一款在中国乃至全球广泛应用的开源持久层框架,它允许开发者将SQL语句与Java代码进行分离,提高了开发效率和可维护性。在Java Web...

    spring-structs2-hibernate-ibatis-API

    最后,iBATIS作为轻量级的数据访问框架,提供了SQL映射文件和动态SQL的功能。iBATIS3.CHM文档中,我们能看到关于SqlMapConfig、SqlMapClient、StatementHandler等关键接口的解释,它允许开发者自定义SQL语句,灵活地...

    ibatis 的关系映射

    iBatis 是一个轻量级的 Java ORM(对象关系映射)框架,它允许开发者将 SQL 查询直接写在 XML 配置文件中,方便地将数据库操作与业务逻辑分离。 在描述中提到的博客链接可能提供了更多关于 iBatis 关系映射的具体...

    ibatis最新

    1. ibatis-core-3.0.jar:这是Ibatis的主要库文件,包含了Ibatis框架的核心功能,如SQL映射文件解析、SQL执行、结果集映射等。它提供了动态SQL支持,使得在Java代码中可以方便地构建和调整SQL语句。 2. ibatis-...

    ibatis官方资料

    描述中提到"ibatis是类似与habernate的开发框架,可以自定义sql",这意味着iBATIS并非完全的ORM(对象关系映射)工具,而是允许开发者编写原生的SQL语句,并将其与Java对象进行绑定,以实现更精细的数据访问控制。...

    ibatis 的 jar包

    在Java开发中,iBATIS是一个强大的持久层框架,它能够将SQL语句与Java代码分离,提供了一种简单但有效的对象关系映射解决方案。这个“ibatis-2.3.4.726.jar”文件是iBATIS框架的一个特定版本——2.3.4.726,它是Java...

    ibatis官方中文文档

    这份文档详细介绍了iBATIS的核心概念,如SqlMapConfig.xml配置文件、SqlMap接口定义、SQL映射文件的结构以及数据访问对象(DAO)的设计。它涵盖了iBATIS的基本使用方法,包括插入、更新、删除和查询等操作。此外,...

    ibatis jar

    在iBATIS的JAR中,META-INF也可能包含其他元数据,比如SQL映射文件的配置信息。 总的来说,iBATIS提供了一种灵活的ORM解决方案,通过将SQL与Java对象绑定,简化了数据库操作,同时保留了SQL的强大功能。对于需要...

    A code generator for iBATIS

    这款代码生成器能够帮助开发者快速创建基于iBATIS的数据访问对象(DAO)、模型类、XML映射文件等,极大地提高了开发效率。 描述中提到的链接指向了一个博客文章,虽然具体内容未提供,但通常这类博客会详细介绍如何...

    ibatis扩展包

    - **sql-map-2.dtd**:这是iBatis的SQL映射文件的DTD(Document Type Definition),用于验证SQL映射文件的XML结构是否正确。开发者可以依据此DTD来编写符合规范的XML配置文件,确保与iBatis框架的兼容性。 - **...

    ibatis配置文件

    最后,通过`&lt;sqlMap resource="com/ibatis/sample/User.xml"/&gt;`引用了具体的SQL映射文件,这是ibatis与数据库交互的核心部分,包含了SQL语句和结果映射规则。 ### 结论 ibatis配置文件是框架运行的基础,通过上述...

    iBATIS_JPetStore-4.0.5

    `resources`可能包含配置文件,如iBATIS的XML映射文件、Spring配置文件等。 4. **web**:这是Web应用的部分,可能包含`WEB-INF`目录,其中`web.xml`是Web应用的部署描述符,定义了Servlet、过滤器和监听器等。此外...

Global site tag (gtag.js) - Google Analytics