`

ibatis 之 复杂类型集合的属性

阅读更多

Result Map还可以装入代表复杂类型对象集合(List)的属性,用以表示在数据库中相互关系为多对多或一对多的数据。拥有集合属性的类作为“一”的一方,而在集合中的对象作为“多”的一方。用来装入对象集合的mapped statement和上面例子一样。唯一的不同是,让SQL Map架构装入复杂类型集合(List)的业务对象的属性必须是java.util.List或java.util.Collection类型

 

映射文件:

 

<!--complex type Collection property-->
<resultMap id="get-product-result" class="product">
			<result property="id" column="prd_id"/>
			<result property="description" column="prd_description"/>
			<result property="price" column="prd_price"/>
		</resultMap>
		<resultMap id="get-categery-complex-list" class="category">
			<result property="id" column="cat_id"/>
			<result property="description" column="cat_description"/>
			<result property="productList" column="cat_id" select="getProductListByCatId"/>
		</resultMap>
		
		<select id="getCategory-complex-list" resultMap="get-categery-complex-list" parameterClass="int">
			<![CDATA[
				select * from t_category where cat_id = #value#
			]]>
		</select>
		
		<select id="getProductListByCatId" resultMap="get-product-result" >
			<![CDATA[	
				select * from t_product where prd_cat_id=#value#
			]]>
		</select>

 

 Category类:

  

package com.ibatis.dataobject;

import java.util.Iterator;
import java.util.List;

public class Category {

	@Override
	public String toString() {
		String temp = "Category---id:" + this.id + "\n" + "description:" + this.description;
		for (Iterator it=this.productList.iterator();it.hasNext();) {
			 Product product = (Product)it.next();
			 temp += "\n" + product.toString();
		}
		return temp;
	}
	private int id;
	private String description;
	private List productList;
	
	
	public List getProductList() {
		return productList;
	}
	public void setProductList(List productList) {
		this.productList = productList;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	
	
	
}

 

  注意:

      private List productList;
 
      public List getProductList() {
  return productList;
      }
      public void setProductList(List productList) {
   this.productList = productList;
     }

 

 DAO层:

 

public Category getProductUseComplexTypeList(int id) throws SQLException {
		init();
		Category category = (Category)sqlMapClient.queryForObject("getCategory-complex-list", id);
		return category;
	}

 

 Test类:

/**
	 * 测试复杂类型集合的属性
	 * @throws SQLException
	 */
	public void getProductUseComplexTypeList() throws SQLException {
		Category category = productDao.getProductUseComplexTypeList(1);
		System.out.println(category);
	}

 

结果:

Category---id:1
description:sports
Product----id:1
description:basketball
price:206.99

Product----id:2
description:football
price:106.99

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Ibatis复杂查询语句.doc

    文档"Ibatis复杂查询语句.doc"所展示的查询语句就是一个很好的例子,展示了Ibatis如何处理复杂的数据库操作。接下来,我们将详细解析这个查询语句中的关键知识点。 1. **动态SQL**: - `&lt;dynamic&gt;`标签用于动态...

    iBATIS-SqlMaps中文教程集合

    在“iBATIS-SqlMaps中文教程集合”中,你将找到四本深入浅出的教程,这些教程涵盖了iBATIS的基础使用、高级特性和实战案例,帮助开发者快速掌握并熟练运用iBATIS解决项目中的实际问题。 1. **基础篇** - iBATIS...

    iBatis各种文档集合

    iBATIS是一个开源的Java库,它允许程序员将SQL数据库查询与应用程序代码分离,从而简化了数据访问层的实现。...无论你是初学者还是有经验的开发者,这个文档集合都会是你深入理解和使用iBATIS的重要资源。

    ibatis中输入输出各种类型的参数分析及#与$区别

    - **复杂类型**: 包括JavaBean对象、数组、集合等。这些类型在iBatis中通常通过`HashMap`或特定的实体类进行封装后传递。 #### #与$的区别 在iBatis中编写SQL语句时,可以使用`#{}`和`${}`两种方式来插入参数。这...

    ibatis 文档查询

    在《iBATIS In Action》一书中,作者详细介绍了如何使用iBATIS进行高级查询技术,包括处理复杂的集合属性、映射关系的继承、语句类型和DDL(Data Definition Language),以及如何处理大规模数据集。 1. **使用...

    ibatis2.0中文API

    iBATIS提供了集合映射和关联映射的方式来处理这些关系,使我们能够在Java对象中方便地操作这些复杂的数据结构。 其次,属性设置详解涉及到的是如何在iBATIS中设置和获取Java对象的属性,以及如何将这些属性与数据库...

    ibatis教程 输入参数详解

    以及ibatis的概述、如何开始使用ibatis、构建SqlSessionFactory的方法(包括通过XML和不使用XML的方式)、获取SqlSession的过程、探索映射SQL语句的方法、命名空间的注意事项、作用域与生命周期的解释、mapper配置...

    ibatis中iterate的例子

    在iBatis中,`&lt;iterate&gt;`标签是一个非常实用的功能,它允许我们处理集合数据,如数组、List或Map等,进行循环遍历并生成动态SQL语句。下面我们将详细探讨`&lt;iterate&gt;`标签的用法及其示例。 `&lt;iterate&gt;`标签的主要...

    IBatis .NET框架实例

    IBatis的强大之处在于其动态SQL功能,可以利用条件判断、循环等构造复杂的SQL语句。例如,使用`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`等标签来构建动态查询。 **八、性能优化** 通过合理的缓存策略、批处理和...

    ibatis jar包

    8. **参数映射**:在调用SQL时,iBATIS可以自动将Java对象的属性值绑定到SQL的参数上,支持简单类型和复杂类型的参数映射。 9. **动态语句**:iBATIS允许根据条件动态生成SQL,如使用`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`...

    ibatis net 指导 手册

    - **3.4.8 复杂集合属性** - 支持对集合类型的属性进行映射,包括列表和集合。 - **3.4.9 避免N+1查询(一对多或多对多)** - 使用关联查询或子查询来减少查询次数。 - **3.4.10 组合键或多个复杂参数属性** -...

    iBatis的动态SQL语句

    ### iBatis中的动态SQL语句详解 ...同时,动态SQL的使用也使得iBatis成为处理复杂数据查询的理想选择之一。希望本文能帮助开发者更好地理解和掌握iBatis框架中的动态SQL技术,从而提升开发效率和项目质量。

    什么是iBATIS

    2. **结果映射**: iBATIS 支持将数据库查询结果自动映射到Java对象,这包括基本类型、复杂类型以及集合类型的映射。 3. **事务管理**: iBATIS 提供了事务控制机制,可以手动或者自动管理数据库事务,以确保数据的...

    ibatis for .net

    5. **参数映射**:Ibatis支持多种类型的参数映射,包括简单的值、复杂对象、数组和集合。它能够自动将.NET对象的属性映射到SQL语句的参数。 6. **结果集映射**:Ibatis可以根据预先定义的结果集映射规则,自动将...

    ibatis批量存储

    iterate标签的基本语法是`(" close=")" conjunction=","/&gt;`,其中`property`指定了集合属性的名称,`open`和`close`定义了循环开始和结束的符号,`conjunction`则是元素之间的连接符。在实际应用中,iterate可以帮助...

    ibatis.net

    6. Result Mapping:将数据库查询的结果映射到.NET对象,支持集合映射、自定义类型转换等功能。 7. Dynamic SQL:允许在XML配置文件中动态构建SQL语句,增强了SQL的灵活性和可维护性。 在“IBatis教程.pdf”中,...

    ibatis快速入门

    3. 参数映射:理解如何传递参数到SQL语句,包括简单类型、复杂类型和Map。 4. 结果映射:学会如何将数据库查询结果映射到Java对象上,包括一对一、一对多、多对多的关系映射。 5. 动态SQL:熟悉如何在映射文件中使用...

Global site tag (gtag.js) - Google Analytics