iBATISで1:Nの関連を扱う方法 その1)Lazy Loadingを利用 親テーブルのみをSelectし、親オブジェクトを生成 子テーブルへのSelectは、子オブジェクトへのアクセ スが発生した時点でiBATISが暗黙的に行う その2)SqlMapのgroupbyを利用 親テーブルと子テーブルをjoinして、一気に取得 親オブジェクトの集約はiBATISが自動的に行う SqlMapのgroupby機能 PRODUCT CATEGORY PROD_ID PROD_NAME CAT CAT_ID CAT_NAME 101 Gym 1 1 EFF 102 Ball 1 2 ZION 201 Zaku 2 202 Gufu 2 203 Dom 2 Java Objects :Category catid=1 name=“EFF” SELECT CAT_ID, CAT_NAME, PROD_ID, PROD_NAME FROM CATEGORY, PRODUCT WHERE CAT_ID = CAT CAT_NAME PROD_ID PROD_NAME 1 EFF 101 Gym 1 EFF 102 Ball 2 ZION 201 Zaku 2 ZION 202 Gufu 2 ZION 203 Dom :Product id=102 name=“Ball” :Product id=201 name=“Zaku” groupby=“catid” CAT_ID :Product id=101 name=“Gym” :Category catid=2 name=“ZION” :Product id=202 name=“Gufu” :Product id=203 name=“Dom” Lazy Loadingとgroupbyの使い分け どちらもメリット・デメリットがある Lazy Loading ○Joinを行わないのでRDBMSへの負荷が少ない ○必要になるまで子オブジェクトを生成しない ×(N+1)問題:子オブジェクトは1レコードづつSQLを投げる SqlMapのgroupby ○(N+1)問題と無縁:子オブジェクトもまとめて1回のSQLで ×Joinを行うのでRDBMSへの負荷は高くなる 使い分けの基準 子オブジェクトへのアクセスが多い⇒groupby 子オブジェクトへのアクセスが少ない⇒Lazy Loading
© Copyright 2024 ExpyDoc