`

ibatis resultMap 嵌套list应用

阅读更多

复杂类型集合的属性:
Result Map还可以装入代表复杂类型对象集合(List)的属性,用以表示在数据库中相互关系为多对多或一对多的数据。拥有集合属性的类作为“一”的一方,而在集合中的对象作为“多”的一方。用来装入对象集合的mapped statement和上面例子一样。唯一的不同是,让SQL Map架构装入复杂类型集合(List)的业务对象的属性必须是java.util.List或java.util.Collection类型。    
<resultMap id=”get-category-result” class=”com.ibatis.example.Category”>
      <result property=”id” column=”CAT_ID”/>
      <result property=”description” column=”CAT_DESCRIPTION”/>
      <result property=”productList” column=”CAT_ID” select=” getProductsByCatId”/>
</resultMap>
<resultMap id=”get-product-result” class=”com.ibatis.example.Product”>
      <result property=”id” column=”PRD_ID”/>
      <result property=”description” column=”PRD_DESCRIPTION”/>
</resultMap>
<statement id=”getCategory” parameterClass=”int” resultMap=”get-category-result”>
      select * from CATEGORY where CAT_ID = #value#
</statement>
<statement id=”getProductsByCatId” parameterClass=”int” resultMap=”get-product-result”>
      select * from PRODUCT where PRD_CAT_ID = #value#
</statement>
上面一次执行的顺序是3->1->4->2。


组合键值或多个复杂参数属性:
在有多个属性之互相关联的时候就用下面的这种格式:
<resultMap id=”get-order-result” class=”com.ibatis.example.Order”>
      <result property=”id” column=”ORD_ID”/>
      <result property=”customerId” column=”ORD_CST_ID”/>
      …
      <result property=”payments” column=”{itemId=ORD_ID, custId=ORD_CST_ID}” select=” getOrderPayments”/>
</resultMap>
<statement id=”getOrderPayments” resultMap=”get-payment-result”>
      select * from PAYMENT where PAY_ORD_ID = #itemId# and PAY_CST_ID = #custId#
</statement>

parameterClass属性是可选的,但强烈建议使用。它的目的是限制输入参数的类型为指定的Java类,并优化框架的性能。如果您使用parameterMap,则没有必要使用parameterClass属性。


parameterMap属性的值等于一个预先定义的<parameterMap>元素的名称。


resultClass属性可以让您指定一个Java类,根据ResultSetMetaData将其自动映射到JDBC的ResultSet。只要是Java Bean的属性名称和ResultSet的列名匹配,属性自动赋值给列值。这使得查询mapped statement变得很短。如:
<statement id="getPerson" parameterClass=”int” resultClass="examples.domain.Person">
SELECT PER_ID as id,
PER_FIRST_NAME as firstName,
PER_LAST_NAME as lastName,
PER_BIRTH_DATE as birthDate,
PER_WEIGHT_KG as weightInKilograms,
PER_HEIGHT_M as heightInMeters
FROM PERSON
WHERE PER_ID = #value#
</statement>


resultMap可以控制数据如何从结果集中取出,以及哪一个属性匹配哪一个字段。不象使用resultClass的自动映射方法,resultMap属性可以允许指定字段的数据类型,NULL的替代值复杂类型映射(包括其他Java Bean,集合类型和基本类型包装类)。如:
<resultMap id=”get-product-result” class=”com.ibatis.example.Product”>
<result property=”id” column=”PRD_ID”/>
<result property=”description” column=”PRD_DESCRIPTION”/>
</resultMap>
<statement id=”getProduct” resultMap=”get-product-result”>
select * from PRODUCT
</statement>
分享到:
评论

相关推荐

    Mybatis resultMap

    Mybatis 是一个流行的...如果文件包含有关ResultMap的示例代码或进一步的解释,那么它将是一个很好的学习资源,可以帮助读者更直观地理解ResultMap的应用。建议解压文件并仔细研究,以增强对Mybatis ResultMap的理解。

    iBATIS-SqlMaps,ibatis映射文件

    在映射文件中,iBATIS提供了强大的映射机制,比如自动类型转换、结果集嵌套处理、自动生成主键等。例如,和可以将查询结果的列名映射到Java对象的属性上,元素可以根据特定列的值来决定如何映射结果集,实现多态查询...

    ibatis 文档查询

    通过`&lt;resultMap&gt;`中的`&lt;result&gt;`标签和`select`属性,可以指定嵌套的查询,实现级联加载。在上述示例中,当查询Account时,会进一步触发查询Order和OrderItem,构建出完整的对象树。 4. **映射关系的继承** ...

    ibatis 一对多关系映射

    在`User`类的映射文件中,我们可以定义一个`resultMap`,它包含了`User`的基本属性以及一个嵌套的`orderList`,表示用户的所有订单: ```xml &lt;resultMap id="userResultMap" type="User"&gt; &lt;!-- 其他User属性映射...

    ibatis one to many mapping

    在一对多映射中,ResultMap 需要包含一个嵌套的结果集,表示一个主对象对应多个子对象的关系。 3. **association** 标签:这个标签用于表示一对一的关联,但也可以在一对多关系中使用。在一对多映射中,association...

    ibatis 框架原理实现

    通过SqlSessionFactory创建SqlSession实例,然后调用其`selectList()`, `selectOne()`, `insert()`, `update()`和`delete()`等方法执行SQL。 6. **Mapper接口与Mapper代理**: Ibatis支持使用Java接口定义服务,...

    ibatis调用oracle的函数,存储过程的方法 IN 和OUT /游标

    在实际应用中,你可能还需要处理更复杂的场景,例如多层嵌套的结果集、自定义数据类型等。确保正确配置Oracle驱动和数据源,以及正确处理异常,是成功调用Oracle函数和存储过程的关键。 通过学习和实践这些技巧,...

    ibatis的的增删改查和一对一、一对多查询

    本篇文章将详细探讨iBatis在增删改查(CRUD)操作以及一对一和一对多关系映射中的应用。 首先,让我们了解一下iBatis的CRUD操作: 1. **创建(Create)**:在iBatis中,创建数据通常通过`&lt;insert&gt;`标签实现。你需要...

    ibatis 开发指南

    在ibatis中,数据关联主要通过resultMap元素实现。例如,一对多关联可通过嵌套查询或嵌套结果的方式实现,而一对一关联则通过association元素定义。 #### 延迟加载 为了提高性能,ibatis支持延迟加载(Lazy ...

    iBatis详细使用手册(.net版)-26页.pdf

    iBatis 是一款优秀的持久层框架,主要应用于.NET环境中,它提供了灵活的SQL映射机制,让开发者能够将SQL语句与.NET代码分离,从而实现数据库操作的便捷与高效。虽然iBatis并非严格的ORM(Object-Relational Mapping...

    IBATIS2开发指南

    IBATIS2在Java社区中广泛使用,尤其在Web应用开发中,因其轻量级、灵活易用的特性受到青睐。 **二、主要功能** 1. **SQL映射**:IBATIS2的核心在于XML配置文件中的SQL映射,通过这些映射,开发者可以定义各种复杂的...

    iBATIS教程 pdf

    - **复杂类型属性**:对于自定义类型的属性,可以通过嵌套ResultMap进行映射。 - **避免N+1 Select**:通过使用适当的关联查询策略来减少不必要的数据库查询次数。 #### 七、缓存 - **缓存机制**:为了提高查询效率...

    ibatisORM增删查改及关系映射

    6. **结果集映射**:`&lt;resultMap&gt;`标签定义了数据库查询结果如何映射到Java对象,可以处理复杂的嵌套结果和关联关系。 7. **动态SQL**:Ibatis提供了一系列的元素,如`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`,...

    Mybatis基于注解实现增删查改和多参数列表查询

    在实际应用中,你需要创建一个继承自`org.apache.ibatis.annotations.Mapper`的接口,并将上述注解的方法放在这个接口里。然后通过SqlSessionFactory创建SqlSession对象,调用Mapper接口的方法执行数据库操作。 ...

    mybatis-jar.zip

    - **ResultMap**: 在映射文件中定义 ResultMap,指定列名与 Java 属性的对应关系,支持嵌套结果和关联查询。 - **自动映射**: 如果列名与 Java 属性名相同,Mybatis 可以自动进行映射。 - **TypeHandler**: 自定义...

    框架面试笔试问答题.docx

    - **嵌套结果**:通过resultMap的association和collection标签配置一对多关系。 - **嵌套查询**:通过select属性指定子查询的ID,实现延迟加载。 - **联合查询**:在一个SQL语句中同时查询主表和从表,适用于查询...

    Mybatis学习文档

    - **起源与发展:** MyBatis起源于Apache的一个开源项目iBatis,最初由Apache Software Foundation托管。2010年,该项目迁移至Google Code并更名为MyBatis。随后,在2013年11月,该项目再次迁移至GitHub平台进行维护...

Global site tag (gtag.js) - Google Analytics