`

ibatis2 解决 n+1 方法

 
阅读更多

 

方法一.延迟加载

<settings lazyLoadingEnabled="true" useStatementNamespaces="true"/>

方法二
public class Account {

  private long id;
  private String firstName;
  private String lastName;
  private String emailAddress;
 
  private List<AccOrder> accOrder;

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public String getEmailAddress() {
    return emailAddress;
  }

  public void setEmailAddress(String emailAddress) {
    this.emailAddress = emailAddress;
  }

public List<AccOrder> getAccOrder() {
 return accOrder;
}

public void setAccOrder(List<AccOrder> accOrder) {
 this.accOrder = accOrder;
}

}


public class AccOrder {
 
 private int accid;
 private String orderName;
 
 public int getAccid() {
  return accid;
 }
 public void setAccid(int accid) {
  this.accid = accid;
 }
 public String getOrderName() {
  return orderName;
 }
 public void setOrderName(String orderName) {
  this.orderName = orderName;
 }

}


<sqlMap namespace="Account">

  <typeAlias alias="Account" type="com.mydomain.pojo.Account"/>
 
  <typeAlias alias="AccOrder" type="com.mydomain.pojo.AccOrder"/>

  <resultMap id="AccOrderResult" class="AccOrder">
    <result property="accid" column="ACC_ID"/>
    <result property="orderName" column="orderName"/>
  </resultMap>
 
    <resultMap id="AccountResult" class="Account" groupBy="ACC_ID">
    <result property="id" column="ACC_ID"/>
    <result property="firstName" column="ACC_FIRST_NAME"/>
    <result property="lastName" column="ACC_LAST_NAME"/>
    <result property="emailAddress" column="ACC_EMAIL"/>
   <result property="accOrder" resultMap="Account.AccOrderResult"/>
  </resultMap>
 
   <select id="getUserById" resultMap="AccountResult" parameterClass="int"> 
       select * from account acc,acc_order ord where acc.acc_id = ord.acc_id
       and acc.ACC_ID = #value# 
   </select> 
</sqlMap>

 


方法3,新建组合类

public class AccAndOrder {

 private Account account;

 private AccOrder accOrder;

 public AccOrder getAccOrder() {
  return accOrder;
 }

 public void setAccOrder(AccOrder accOrder) {
  this.accOrder = accOrder;
 }

 public Account getAccount() {
  return account;
 }

 public void setAccount(Account account) {
  this.account = account;
 }

}

<sqlMap namespace="AccAndOrder">

  <!-- Use type aliases to avoid typing the full classname every time. -->
  <typeAlias alias="AccAndOrder" type="com.mydomain.pojo.AccAndOrder"/>

  <resultMap id="Results" class="AccAndOrder">
    <result property="account.id" column="ACC_ID"/>
    <result property="account.firstName" column="ACC_FIRST_NAME"/>
    <result property="account.lastName" column="ACC_LAST_NAME"/>
    <result property="account.emailAddress" column="ACC_EMAIL"/>
    <result property="accOrder.orderName" column="orderName"/>
  </resultMap>

  <statement id="selectMany" resultMap="Results">
     select acc.acc_id,acc.ACC_FIRST_NAME,acc.ACC_LAST_NAME,acc.ACC_EMAIL,
     ord.orderName
  from ACCOUNT acc,acc_order  ord  where  acc.acc_id = ord.acc_id
  </statement>
</sqlMap>


 

分享到:
评论

相关推荐

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

    "ibatis解决多对一n+1问题"这个主题聚焦于MyBatis框架中如何高效地处理多对一关联查询,避免出现性能瓶颈的“n+1”问题。这个问题通常发生在查询一对多关系时,如果不对查询进行优化,会导致大量的额外数据库访问,...

    ibatis n+1选择问题 的几种解决方案

    下面将详细介绍几种解决iBATIS中的N+1选择问题的方法。 1. **批处理(Batch)查询**: 批处理查询允许我们一次性发送多个SQL语句到数据库,减少数据库连接次数。在iBATIS中,可以通过设置动态SQL来实现。例如,...

    ibatis N+1问题

    解决N+1问题的方法主要有以下几种: 1. **批处理**: 在MyBatis中,我们可以使用批处理来减少数据库交互。通过设置`&lt;select&gt;`标签中的`useCache="true"`和`fetchSize`属性,可以尝试一次性获取所有关联数据,而不是...

    maven3+struts2+spring+ibatis

    maven3+struts2+spring+ibatis,本来是用maven3+struts2+spring+hibernate但考虑到hibernate...2.struts2出现乱码的问题,解决方法:在struts.xml中加入 &lt;constant name="struts.i18n.encoding" value="gb2312" /&gt;即可

    ibatis应对批量update

    为了解决这个问题,ibatis(现已更名为MyBatis)提供了一种支持批量更新的机制,能够显著提高数据处理的速度。 #### 批量Update背景与问题 在实际应用中,经常会遇到需要批量更新数据库中的数据的情况,例如:商品...

    ibatis学习锦集

    6. **最佳实践**:学习如何优化SQL,避免N+1查询问题,以及如何利用缓存提高性能。 7. **实战项目**:通过参与实际项目或复刻JpetStore_4,提升对iBatis的运用能力。 总之,iBatis是一个强大且灵活的持久层框架,...

    ibatis 开发指南.

    10. **最佳实践**:如何有效地设计Mapper接口和XML文件,避免N+1查询,以及如何利用iBATIS进行性能优化。 学习iBATIS不仅需要理解上述知识点,还需要通过实际项目实践来巩固和深化理解。通过分析提供的源码,我们...

    iBATIS实战

    6.2.3 避免N+1查询问题 105 6.3 继承 107 6.4 其他用途 109 6.4.1 使用语句类型和DDL 109 6.4.2 处理超大型数据集 109 6.5 小结 115 第7章 事务 116 7.1 事务是什么 116 7.1.1 一个简单的银行转账示例 116 7.1.2 ...

    ibatis分页技术

    为了解决N+1问题,即由于懒加载机制导致的多次数据库访问,通常会关闭load-lazy属性,并采用以下策略: - **多结果集映射**:通过定义多个`resultMap`,可以区分不同的数据加载需求。例如,`result`用于快速获取...

    iBATIS资料汇总

    在这份资料中,你可能会学习到如何编写高效的iBATIS SQL语句,避免N+1问题,以及如何优化查询性能等实用技巧。 8. **案例分析** 文件可能还包含了一些实际案例,展示如何在不同场景下使用iBATIS,如单表操作、多...

    ibatis 开发指南

    8. **最佳实践与案例分析**:提供实际开发中的最佳实践,如如何优化SQL,避免N+1问题,以及在大型项目中如何有效地组织和管理映射文件。 9. **与其他框架集成**:探讨如何将iBatis与Spring、Struts等其他框架整合,...

    IBatis.net教程

    - iBATISDataMapper 1.6.0版本中,解决了Select语句中group by导致的N+1问题。 - 增加了对SQL片段的支持,通过节点标识。 - 引入了对字典查询IDictionary,V&gt;的支持,方便处理键值对数据。 - 存储过程无参数映射得到...

    iBATIS DataMapper1.6 中文翻译

    1. 解决了带有`group by`的`Select`语句中N+1问题,优化了查询性能,避免了多次数据库访问。 2. 引入了`&lt;include/&gt;`节点,支持SQL片段的重用,提高代码的可维护性和复用性。 3. 添加了对字典查询的支持,即`...

    ibatis的教程

    1. 解决了使用group by的Select语句中出现的N+1问题,这涉及到性能优化。 2. 通过节点标识,支持了SQL片段的复用,使得SQL代码更加模块化。 3. 增加了对字典查询的支持,通过IDictionary,V&gt;QueryForDictionary,V&gt;()...

    ibatis开发手册(pdf)

    - **避免 N+1 Select(1:M 和 M:N)**:进一步讲解如何优化多对多查询。 - **组合键值或多个复杂参数属性**:当一个参数由多个属性组成时的处理方法。 - **支持 ParameterMap 和 ResultMap 的数据类型**:详细...

    IBatis入门教程

    iBatis,现更名为Mybatis,是一个由Apache基金会支持的开源项目,主要提供对象关系映射(O/R Mapping)解决方案。作为一个轻量级的框架,iBatis以其简单易用的特点受到开发者的青睐,尤其适合那些不需要复杂功能的...

    ibatis开发指南(中文版)

    - **避免N+1 Select(1:1)**:优化一对多关系的数据加载,减少查询次数。 - **延迟加载VS联合查询(1:1)**:选择合适的加载策略,提高性能。 - **复杂类型集合的属性**:支持多对多关系的数据加载。 - **避免N+1 ...

    oracle分页(ibatis-2.3.4.726.jar).rar

    例如,第`n`页的`start`为`(n-1)*limit+1`,`end`为`n*limit`。 4. **动态SQL**:如果你希望使SQL更加灵活,可以使用iBATIS的动态SQL功能,如`&lt;if&gt;`标签,根据是否需要分页来动态生成`ROWNUM`相关的部分。 5. **...

    Tutorial

    - **处理N+1选择问题**:在本教程中,我们还将展示如何通过修改JPetStore来处理常见的N+1选择问题。N+1选择问题是指当从数据库中获取一组相关记录时,除了主查询外还需要进行额外的子查询来加载关联数据,从而导致...

Global site tag (gtag.js) - Google Analytics