因为mapped statement知道如何装入合适的数据和Java类,通过将resultMap的property和相应的mapped statement联系起来,可以自动地给复杂类型(即用户创建的类)的属性赋值。复杂类型用以表示在数据库中相互关系为一对一,一对多的数据。对于一对多的数据关系,拥有复杂类型属性的类作为“多”的一方,而复杂属性本身则作为“一”的一方。考虑下面的例子:
<resultMap id=”get-product-result” class=”com.ibatis.example.Product”>
<result property=”id” column=”PRD_ID”/>
<result property=”description” column=”PRD_DESCRIPTION”/>
<result property=”category” column=”PRD_CAT_ID” select=”getCategory”/>
</resultMap>
<resultMap id=”get-category-result” class=”com.ibatis.example.Category”>
<result property=”id” column=”CAT_ID”/>
<result property=”description” column=”CAT_DESCRIPTION”/>
</resultMap>
<statement id=”getProduct” parameterClass=”int” resultMap=”get-product-result”>
select * from PRODUCT where PRD_ID = #value#
</statement>
<statement id=”getCategory” parameterClass=”int” resultMap=”get-category-result”>
select * from CATEGORY where CAT_ID = #value#
</statement>
上面的例子中,Product对象拥有一个类型为Category的category属性。因为category是复杂类型(用户定义的类型),JDBC不知道如何给它赋值。通过将category属性值和另一个mapped statement联系起来,为SQL Map引擎如何给它赋值提供了足够的信息。通过执行“getProduct”,“get-product-result”Result Map使用PRD_CAT_ID字段的值去调用“getCategory”。“get-category-result”Result Map将初始化一个Category对象并赋值给它。然后整个Category对象将赋值给Product的category属性。
相关介绍,可参考这里
http://www.diandian315.com/thread-36-1-1.html
分享到:
相关推荐
在iBatis中,输入输出参数类型的支持非常丰富,几乎涵盖了Java中常见的所有基本数据类型及其封装类,同时也支持自定义JavaBean类型的传递。这使得开发者在处理数据库操作时具有很高的灵活性。 - **基本数据类型**: ...
标题 "ibatis类型" 暗示我们讨论的是关于iBATIS这个持久层框架的一些特定类型或组件。iBATIS是Java开发中的一个流行数据库访问框架,它允许开发者将SQL语句直接集成到XML配置文件中,实现了SQL与Java代码的分离,...
- 支持复杂类型:可以通过自定义类型处理器处理复杂的参数类型。 #### 6. ResultMap - **定义**: 结果映射定义了结果集中列名与对象属性之间的映射关系。 - **作用**: - 自动填充对象属性:根据结果集中的列名...
4. **ResultMap**:定义了结果集如何映射到Java对象,支持复杂的列名到Java属性的映射,如一对一、一对多、多对多的关系映射。 5. **Transaction**:处理数据库事务,提供了开始、提交、回滚等操作。 **二、iBATIS...
同时,它还支持简单类型、复杂类型(如Map或自定义对象)的参数传递。 3. 结果映射:通过`<resultMap>`标签,可以定义如何将查询结果映射到Java对象,包括一对一、一对多、多对一、自定义类型转换等多种映射方式。...
iBatis的插件机制允许用户自定义拦截器,实现对Executor、StatementHandler、ParameterHandler和ResultSetHandler四个关键组件的增强。源码中的`org.apache.ibatis.plugin.Interceptor`和`org.apache.ibatis.plugin....
- **动态SQL元素**:iBatis支持使用动态SQL来构建复杂的查询条件。例如,可以使用`<isNotEmpty>`元素来根据条件添加`ORDER BY`子句。 ```xml ORDER BY #orderField# ``` - **自定义SQL片段**:通过`...
7. **结果映射**:iBATIS能自动将查询结果映射到Java对象,通过结果映射配置,可以指定字段与Java属性之间的映射关系,支持自定义类型处理器以处理复杂类型的映射。 8. **参数映射**:在调用SQL时,iBATIS可以自动...
4. **结果集映射**:Ibatis通过`<resultMap>`标签定义结果集映射,可以处理复杂的一对多、一对一、多对多关系,以及自定义类型转换等。 5. **事务管理**:在Spring环境中,可以使用Spring的...
iBatis的核心配置文件(mybatis-config.xml)定义了全局属性,包括数据源、事务管理器、类型别名、插件等。同时,每个Mapper XML文件则包含了具体的SQL映射,如插入、更新、删除和查询语句。 3. **SQL映射**: ...
7. **开发效率提升**:使用Ibatis Plugin能够大大提高开发效率,特别是在处理大量表和复杂业务逻辑的项目中,减少了重复的编码工作,使开发者可以更专注于业务逻辑的实现。 8. **版本兼容性**:了解Ibatis Plugin...
5. **参数映射**:支持多种参数类型,包括简单类型、复杂对象和自定义类型,使得参数传递更加灵活。 6. **结果集映射**:可以处理多表联查的结果集,通过配置文件定义复杂的结果集映射规则。 **IBatis.DataAccess....
通过定义`<resultMap>`,我们可以指定列名与Java属性的对应关系,甚至处理一对一、一对多、多对多等复杂关系。 4. **事务管理**:iBatis可以方便地进行事务控制,通过SqlSessionFactory和SqlSession对象,我们可以...
缓存(Cache)功能是iBATIS提高性能的重要手段,它提供了几种类型的缓存策略,包括MEMORY类型(基于内存的缓存,可能使用WeakReference防止内存泄漏)、LRU(Least Recently Used,最近最少使用,一种淘汰算法)和...
- 动态SQL语句中的条件表达式需要使用`test`属性,其值是一个OGNL表达式,用于判断条件。 - 使用`#{}`语法引用参数,这有助于防止SQL注入。 - 当动态SQL块中的所有内容都被忽略时,Ibatis会自动删除多余的SQL片段,...
总结来说,iBatis提供了一种简单但强大的方式来管理数据库操作,通过XML配置文件,我们可以自定义SQL,控制事务,并实现对象与数据库记录之间的映射。这种灵活性使得iBatis成为J2EE开发中一个受欢迎的工具,尤其适用...
通过本教程书的学习,你将掌握Ibatis.net的基本使用方法,包括查询、插入、更新和删除数据,以及如何处理复杂的业务场景。同时,你还将了解到如何结合其他.NET技术,如Entity Framework或NHibernate,以实现更高效、...
Ibatis支持自动映射和自定义映射,自动映射会尝试将结果集中的列名与Java对象的属性名匹配;自定义映射则可以通过`resultMap`标签进行精细控制。 ## 8. 级联操作 Ibatis支持一对多、多对一等关系的级联操作,通过...