`
chinagdvea
  • 浏览: 130581 次
  • 性别: Icon_minigender_1
  • 来自: 韶关
社区版块
存档分类
最新评论

resultMap的使用以及延时加载机制

XML 
阅读更多
1.一对多查询

UserDAOMapper.xml

<SqlMap namespace="User">

  <typeAlias alias="user" type="com.ibatis.sample.User"/>
  <typeAlias alias="address" type="com.ibatis.sample.Address"/>

  <resultMap id="get-user-result" class="user">  resultMap的功能就是将user类的所有属性都映射出来 
    <result property="id" column="id" /> property是user的属性, column是数据库列名
    <result property="name" column="name" />
    <result property="addresses" column="id"   此处指明通过getAddressById获得addresses(一个address的数组)属性,getAddressById的参数是id
      select="User.getAddressesById"/>   此处的  User.getAddressById   User.指的是命名空间
  /<resultMap>

  <select id="getUsers"
    parameterClass="string"
    resultMap="get-user-result" >
    <![CDATA[
    select
      id,
      name
    from t_user
    where  id = #id#
    ]]>
  </select>

  <select id="getAddressesById"
    parameterClass="int"
    resultClass="address">
    <![CDATA[
    select
      address,
      zipcode
    from t_address
    where user_id = #userid#
    ]]>
  </select>

使用方法代码

List userList = sqlMap.queryForList("User.getUsers", ""); 即可返回user的list
Address[] addresses = userList.getAddresses();

*延时加载
在List userList = sqlMap.queryForList("User.getUsers", "")时,只执行了select id, name, sex from t_user一条SQL语句.当
Address[] addresses = userList.getAddresses();时,才开始执行获取Address的sql语句.这就是延时加载

*延迟加载并非对所有属性有效,只有实现了List接口的属性才能进行延迟加载

2.一对一查询

如果user和address是一对一关联,则使用同时select两个表的查询,以提高性能,节省资源

<resultMap id="get-user-result" class="user">
  <result property="id" column="id"/>
  <result property="name" column="name"/>
  <result property="sex" column="sex"/>
  <result property="address" column="t_address.address"/>
  <result property="zipCode" column="t_address.zipcode"/>
</resultMap>

<select parameterClass="string" resultMap="get-user-result" >
  <![CDATA[
  select
    *
  from t_user, t_address
  where t_user.id = t_address.user_id
  ]]>
</select>
分享到:
评论

相关推荐

    Mybatis中的延迟加载案例解析

    一、延迟加载机制 在Mybatis中,通过`resultMap`的`association`和`collection`元素可以实现一对多和一对一的映射,并且它们支持延迟加载功能。延迟加载的基本原理是,Mybatis会在对象被请求时,检查其相关属性是否...

    Mybatis查询延迟加载详解及实例

    Mybatis使用Java的动态代理机制,在你需要访问延迟加载的属性时,实际调用的是代理对象的方法,这个方法会去数据库执行对应的查询语句,获取所需的数据。 需要注意的是,虽然延迟加载能够减少一次性加载大量数据的...

    MyBatis懒加载

    MyBatis懒加载,也称为延迟加载(Lazy Loading),是一种优化技术,主要应用于对象关系映射框架中,如MyBatis。懒加载的核心思想是“按需加载”,即在真正需要数据时才去数据库获取,而不是在初始加载实体对象时就一...

    MyBatis关联映射:一对一、一对多-代码.zip

    MyBatis提供了延迟加载机制,但默认是关闭的,需要在Mapper XML的association或collection标签中启用。 同时,为了处理一对多关系时可能出现的级联更新和级联删除,MyBatis提供了cascade属性,可以在insert、update...

    基于java的企业级应用开发:MyBatis的关联映射.ppt

    总的来说,MyBatis的关联映射是实现Java对象与数据库表关联关系的重要手段,通过合理使用`&lt;association&gt;`元素和延迟加载机制,可以在保证开发灵活性的同时,有效提升应用程序的性能。学习并掌握这些知识点对于进行...

    Mybtis级联映射(一对一,一对多)例子

    默认情况下,Mybatis是开启延迟加载的,但如果希望立即加载关联数据,可以通过设置`fetchType="eager"`来实现。 ### 5. 示例代码运行 这个压缩包中的例子应该包含了完整的Java代码和Mybatis配置文件,你可以直接...

    MyBatis学习总结

    - 高级应用篇:掌握关联查询,理解延迟加载机制,使用 MyBatis 的缓存功能,以及逆向工程生成代码。 - 扩展点:了解如何与其他框架集成,如 SpringBoot,以及使用第三方分页插件 PageHelper。 通过学习 MyBatis,...

    Mybatis讲义laodu

    高级映射涉及一对多、多对一的关系映射,以及延迟加载机制,使得大数据量关联查询更加高效。 总结来说,MyBatis是一个强大的持久层框架,提供了丰富的功能和高度定制性,便于开发人员进行数据库操作,降低了数据库...

    Mybaties2Demo

    在这个项目中,你将深入理解MyBatis如何处理不同类型的关联关系,包括一对一、一对多、多对多的映射,以及延迟加载的概念和实现。 首先,我们来了解一下MyBatis。MyBatis是一个优秀的持久层框架,它支持定制化SQL、...

    Mybatis关联映射

    MyBatis的延迟加载机制 - **实现**: 在MyBatis中,通过配置`lazyLoadingEnabled`参数来开启延迟加载功能。 - **配置**: 在全局配置文件中设置`lazyLoadingEnabled=true`,并配置具体的懒加载策略。 - **使用**: 当...

    ibatis解决多对一n+1问题(更新上传例子(mybatis)代码)

    5. **使用延迟加载(Lazy Loading)**:MyBatis支持延迟加载,即在真正需要子记录时才去数据库查询。但这种方式在大数据量时可能导致不必要的数据库交互,因此需要根据实际需求权衡。 6. **批处理(Batch)**:对于...

    MyBatis的关联映射彩色PPT版本.pptx

    为了解决这个问题,MyBatis提供延迟加载机制,通过在核心配置文件中开启`lazyLoadingEnabled`和关闭`aggressiveLazyLoading`,可以在需要时才加载关联对象,从而提高效率。 对于一对多的关系,例如一个部门有多名...

    Springboot中mybatis表关联映射关系(一对一)

    * 在使用 `fetchType` 属性时,需要指定是否启动延迟加载。 MyBatis 提供了两种方式来加载关联关系对象:嵌套查询和嵌套结果。嵌套查询时指通过执行另一条 SQL 映射语句来返回预期的复杂类型;嵌套结果是使用嵌套...

    ibatis实战之一对多关联(源代码)

    为了提高性能,可以考虑使用延迟加载(lazy loading)或级联加载(eager loading)。延迟加载只在访问关联对象时才执行SQL,而级联加载则在获取主对象时一起加载所有关联对象。这需要在`&lt;collection&gt;`标签中设置`...

    Mybatis的一对一,一对多

    在处理关联关系时,MyBatis还提供了缓存和延迟加载机制。缓存可以帮助减少数据库的访问,提高性能;而延迟加载则是在需要的时候才去查询关联的数据,避免一次性加载大量数据导致内存压力。 - **一级缓存**:默认...

    Mybatis系列课程-一对一

    - **Lazy loading(懒加载)**:如果关联数据不常用,可以配置为延迟加载,只有当真正需要时才会执行额外的SQL查询获取关联数据。 5. **Nested Select**:Mybatis通过在主查询中嵌入子查询来实现关联数据的加载。...

    MyBatis的关联映射-资料.rar

    9. **关联映射的性能优化**:通过合理设计关联映射,如避免N+1查询问题,使用子查询或连接查询,以及利用缓存机制,可以显著提升数据检索的效率。 总的来说,MyBatis的关联映射功能使得数据库操作变得更加灵活,...

    Mybatis 框架教程(二)

    - 当查询主表数据量较大,而从表数据不是每次都需要时,使用延迟加载可以减少初始查询的时间消耗。 **配置**: - 在`SqlMapConfig.xml`中,配置`settings`标签启用延迟加载功能。 - 映射文件中,通过`resultMap`中的...

    ibatis高级特性

    本文将深入探讨 iBATIS 的一些高级特性,包括关联对象、事务管理、延迟加载、缓存以及动态标签的使用。 **关联对象** 在 iBATIS 中,关联对象的处理并不像 Hibernate 那样提供级联保存和级联删除的功能。但 iBATIS...

Global site tag (gtag.js) - Google Analytics