ibatis数据关联

最近有时间好好的看了一下ibatis,对它的数据关联做了个测试,对比与hibernate,觉得ibatis使用起来更加的方便,只是我个人的喜好,下面我就把用到的一些配置以及使用方法简单的罗列一下。

(一)一对多关联

存在两个表,order表和orderFee表,通过order_id关联,一个order对应多个orderFee。

设置两个bean类:

Order.java

    private long ORDER_ID;
    private String PROVINCE_CODE;
    private String CITY_CODE;
    private List<OrderFee> fee;

    ......set和get方法

OrderFee.java

    private long ORDER_ID;
    private String ORDER_DATE;
    private String ORDER_FEE;

    ......set和get方法

之后对应的ibatis配置文件中,配置如下:

<typeAlias alias="Order" type="com.ibatis.Order"/>
<typeAlias alias="OrderFee" type="com.ibatis.OrderFee"/>

 <resultMap class="Order" id="get-order-fee">
        <result property="ORDER_ID" column="ORDER_ID"/>
        <result property="PROVINCE_CODE" column="PROVINCE_CODE"/>
        <result property="CITY_CODE" column="CITY_CODE"/>
        <result property="fee" column="ORDER_ID" select="selectOrderFee"/>
    </resultMap>

    <select id="getOrderAndFee"  resultMap="get-order-fee">
        <![CDATA[
            select ORDER_ID,PROVINCE_CODE,CITY_CODE  from order
        ]]>
    </select>
    <select id="selectOrderFee" parameterClass="java.lang.Long"  resultClass="OrderFee">
        <![CDATA[
            select ORDER_DATE,ORDER_FEE from orderFee where ORDER_ID=#ORDER_ID#
        ]]>
    </select>

需要注意的是,这里有一个潜在的性能问题,也就是所谓“n+1”Select问题。当有大量数据时,不建议使用此方法。

(二)一对一关联

        一对一关联是一对多关联的一种特例。这种情况下,如果采用上面的示例将导致1+1条SQL的执行。
        对于这种情况,我们可以采用一次Select两张表的方式,避免这样的性能开销(假设上面示例中,每个Order只有一个对应的OrderFee记录):

       这时,在Order.java中要有ORDER_FEE以及ORDER_DATE两个类型属性,以及对应的get和set方法。

    <resultMap class="OrderOne" id="get-order-fee-one">
        <result property="ORDER_ID" column="ORDER_ID"/>
        <result property="PROVINCE_CODE" column="PROVINCE_CODE"/>
        <result property="CITY_CODE" column="CITY_CODE"/>
        <result property="ORDER_FEE" column="ORDER_FEE"/>
        <result property="ORDER_DATE" column="ORDER_DATE"/>
    </resultMap>
    
    <select id="getOrderOne" resultMap="get-order-fee-one">
        <![CDATA[
            select  t1.ORDER_IDPROVINCE_CODE,CITY_CODE,ORDER_FEE,ORDER_DATE
            from order t1,orderFee t2
            where t1.ORDER_ID = t2.ORDER_ID
        ]]>
    </select>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

springk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值