Hello,

 

I didn't find documentation on the using of the attribute lazyload of
the <result> element.

 

I tried to do this data map (file attached), but I couldn't retrieve
data with lazy loading. Each time I got all the tree of objects.

 

I used the iBatis.Net DataMapper 1.6.1.

 

Thank you for your help.

 

<?xml version="1.0" encoding="utf-8" ?>

<sqlMap xmlns="http://ibatis.apache.org/mapping"; namespace="ecommerce">
  <alias>
    <typeAlias alias="Customer"  type="iBatisSample.Model.Customer,  iBatisSample"/>
    <typeAlias alias="Order"     type="iBatisSample.Model.Order,     iBatisSample"/>
    <typeAlias alias="OrderLine" type="iBatisSample.Model.OrderLine, iBatisSample"/>
    <typeAlias alias="Item"      type="iBatisSample.Model.Item,      iBatisSample"/>
  </alias>

  <resultMaps>
    
    <resultMap id="CustomerMap" class="Customer">
      <result property="_id"        column="Id"/>
      <result property="_firstName" column="FirstName"/>
      <result property="_lastName"  column="LastName"/>
      <result property="_orders"    resultMapping="ecommerce.OrderMap" lazyLoad="true"/>
    </resultMap>

    <resultMap id="OrderMap" class="Order">
      <result property="_id" column="Id"/>
      <result property="_orderLines" resultMapping="ecommerce.OrderLineMap" lazyLoad="true"/>
    </resultMap>

    <resultMap id="OrderLineMap" class="OrderLine">
      <result property="_quantity" column="Quantity"/>
      <result property="_item"     resultMapping="ecommerce.ItemMap" lazyLoad="true"/>
    </resultMap>

    <resultMap id="ItemMap" class="Item">
      <result property="_id"   column="Id"/>
      <result property="_name" column="Name"/>
    </resultMap>

  </resultMaps>

  <!-- .......................................................................................................... -->

  <statements>

    <!-- Table Customer only -->

    <sql id="LoadCustomerSelect">
      SELECT C.Id, C.FirstName, C.LastName, O.Id, OL.Quantity, I.Id, I.Name
      FROM Customer C
      LEFT JOIN [Order] O ON C.Id = O.Id
      LEFT JOIN OrderLine OL ON O.Id = OL.Id
      LEFT JOIN Item I ON OL.Id = I.Id
    </sql>

    <select id="LoadCustomers" resultMap="CustomerMap">
      <include refid="LoadCustomerSelect"/>
    </select>

    <select id="LoadCustomerById" parameterClass="int" resultMap="CustomerMap">
      <include refid="LoadCustomerSelect"/>
      WHERE C.Id = #value#
    </select>

    <insert id="InsertCustomer" parameterClass="Customer">
      INSERT INTO Customer (Id, FirstName, LastName)
      VALUES (#_id#, #_firstName#, #_lastName#)
    </insert>

    <update id="UpdateCustomer" parameterClass="Customer">
      UPDATE Customer SET
      FirstName = #_firstName#,
      LastName = #_lastName#
      WHERE Id = #_id#
    </update>

    <delete id="DeleteCustomer" parameterClass="Customer">
      DELETE FROM Customer
      WHERE Id = #_id#
    </delete>

    <!-- Table Customer only -->

    <select id="LoadCustomers1" resultMap="CustomerMap">
      SELECT Id, FirstName, LastName
      FROM Customer
    </select>

    <select id="LoadCustomers2" resultMap="CustomerMap">
      SELECT * FROM Customer
    </select>

    <select id="LoadCustomers3"  resultClass="Customer">
      SELECT * FROM Customer
    </select>

  </statements>
</sqlMap>

Reply via email to