Ibatis的延迟加载的配置和引起的一些问题
1.在sqlMapConfig.xml中,加入:
<sqlMapConfig>
…
<settings lazyLoadingEnabled="true" enhancementEnabled="true"/>
<sqlMap resource=""/>
…
</sqlMapConfig>
2.在CardInfoMap.xml中,加入
<resultMap id="cardInfo_result" column="CARD_TYPE_ID" select="CardType_findCardType"/>
</resultMap>
当然,CardTypeMap.xml和CardInfoMap.xml都要有。
3.这样,在代码中,就可以方便地访问卡信息的卡类型了。如:
CardInfo cardInfo = cardManager.findCardInfo(cardId);
String cardTypeName = cardInfo.getCardType().getName();
不过,利用延迟加载带来一些和平时编码不一样的地方:
1. cardInfo.getCardType()永远不会等于null,它里面实际上是一个代理类,所以如果要判断cardInfo.getCardType()是否为null,没法判断,因此,需要转变一下思路,可以判断cardInfo.getCardType().getId()(这个ID是PK)是否为null来判断。
2. 利用Ibatis延迟加载,cardInfo.getCardType()里面的代理类会,占用内存非常大。(这个可以用SizeOf测试出来)