【问题标题】:Does iBatis supports lazy loading like Hibernate?iBatis 是否支持像 Hibernate 一样的延迟加载?
【发布时间】:2019-04-25 01:23:23
【问题描述】:

我想知道 iBatis 是否可以像 Hibernate 一样提供对惰性获取的支持?例如,我有 User 类,它有

public class User {
    List<Address> addresses;

    public List<Address> getAddresses(){
        return addresses;
    }
    ...
}

现在我想在调用 user.getAddresses() 时实现延迟获取。是否有可能在 iBatis 中实现这一点?如果是那怎么办?

感谢您的帮助。

【问题讨论】:

    标签: lazy-loading ibatis


    【解决方案1】:

    当然。
    根据文档,您可以为要延迟加载的属性设置resultMapresult 元素的lazyLoad 属性。
    例如:

    <resultMap id="resultMapUser" class="User">
        <result property="addresses" select="someOtherStatementName" lazyLoad="true"/>
    </resultMap>
    

    【讨论】:

      【解决方案2】:

      XML 映射:
      3.2.7+ -> fetchType 属性(懒惰/渴望)

      <resultMap id="itemResultMap" type="Item">
          <id property="id" column="id"/>
          <association property="subItem" column="subItemId" javaType="SubItem" 
                       select="selectSubItemByIdQuery" fetchType="lazy"/>
      </resultMap>
      

      @注解映射:

      @Select({"SELECT * FROM item WHERE id = #{id}"})
      @Results({
              @Result(property = "id", column = "id"),
              @Result(property = "subItem", column = "subItemId", javaType = SubItem.class,
                      one = @One(select = "SubItemMapper.getById", 
                                 fetchType = FetchType.LAZY))
      })
      Item getById(int id);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-20
        • 1970-01-01
        • 2014-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多