Re: n+1 is triggering multiple queries, 3?
Thanks Clinton, I will look into this myself when I have more time. I wish there were a MySql Profiler or something so that I could see what queries are actually being executed. Maybe I will step into your code if I get a chance. KrisClinton Begin [EMAIL PROTECTED] wrote: Kris,This is the right list ([EMAIL PROTECTED]).Sorry nobody responded. I had a quick look when you originally sent it, and I couldn't see how it was possible that the groupBy or a nested resultMap could cause additional queries...Perhaps someone else has thoughts? If not, you might have to write an isolated unit test and submit it through JIRA.Cheers,Clinton On 7/9/05, Kris Rasmussen [EMAIL PROTECTED] wrote: I have an n+1 mapping. When I look at mysql health in the administrator it apears that 3 queries are being executed instead of one. The first query gets executed when I retrieve the intial object via queryForObject. The next two queries are being executed when I attempt to access the List which stores the related objects from the main object. I am very curious what is going on since I don't know how Ibatis could even know what query to execute to get the items later? The following maps are used to retrive a single instance of classB with all of its classA children stored in one of its properties which is of course a list. resultMap id="getClassAResult" class="classA" ... some basic properties /resultMap resultMap id="getClassBResult" class="classB" result property="primKey1" column="classB.primKey1"/ result property="primKey2" column="classB.primKey2"/ ... some more properties /resultMap resultMap id="getClassBWithClassAsResult" class="classB" extends="getClassBResult" groupBy="primKey1,primKey2" result property="classAs" resultMap="namespace.getClassAResult"/ /resultMap and my select statement... select id="getClassBWithClassAs" parameterClass="keyClass" resultMap="getClassBWithClassAsResult" SELECT classB.*,classA.* FROM classB ,classA WHERE classB.primKey1=#primKey1# AND classB.primKey2=#primKey2# AND gallery_image.SiteId=#siteId# AND gallery_image.BlockId=#blockId# GROUP BY classB.primKey1,classB.primKey2,classA.primKey3 /select __Do You Yahoo!?Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com Start your day with Yahoo! - make it your home page
Re: n+1 is triggering multiple queries, 3?
p6spy is also a great sql logging tool. On 7/14/05, Ron Grabowski [EMAIL PROTECTED] wrote: The Java version of iBATIS has support for logging all sql sent to the database. Here's some sample output: http://issues.apache.org/jira/browse/IBATISNET-35 --- Kris Rasmussen [EMAIL PROTECTED] wrote: Thanks Clinton, I will look into this myself when I have more time. I wish there were a MySql Profiler or something so that I could see what queries are actually being executed. Maybe I will step into your code if I get a chance. Kris Clinton Begin [EMAIL PROTECTED] wrote: Kris, This is the right list ([EMAIL PROTECTED]). Sorry nobody responded. I had a quick look when you originally sent it, and I couldn't see how it was possible that the groupBy or a nested resultMap could cause additional queries... Perhaps someone else has thoughts? If not, you might have to write an isolated unit test and submit it through JIRA. Cheers, Clinton On 7/9/05, Kris Rasmussen [EMAIL PROTECTED] wrote:I have an n+1 mapping. When I look at mysql health in the administrator it apears that 3 queries are being executed instead of one. The first query gets executed when I retrieve the intial object via queryForObject. The next two queries are being executed when I attempt to access the List which stores the related objects from the main object. I am very curious what is going on since I don't know how Ibatis could even know what query to execute to get the items later? The following maps are used to retrive a single instance of classB with all of its classA children stored in one of its properties which is of course a list. resultMap id=getClassAResult class=classA ... some basic properties /resultMap resultMap id=getClassBResult class=classB result property=primKey1 column=classB.primKey1/ result property=primKey2 column=classB.primKey2/ ... some more properties /resultMap resultMap id=getClassBWithClassAsResult class=classB extends=getClassBResult groupBy=primKey1,primKey2 result property=classAs resultMap=namespace.getClassAResult/ /resultMap and my select statement... select id=getClassBWithClassAs parameterClass=keyClass resultMap=getClassBWithClassAsResult SELECT classB.*,classA.* FROM classB ,classA WHERE classB.primKey1=#primKey1# AND classB.primKey2=#primKey2# AND gallery_image.SiteId=#siteId# AND gallery_image.BlockId=#blockId# GROUP BY classB.primKey1,classB.primKey2,classA.primKey3 /select __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com - Start your day with Yahoo! - make it your home page
n+1 is triggering multiple queries, 3?
I have an n+1 mapping. When I look at mysql health in the administrator it apears that 3 queries are being executed instead of one. The first query gets executed when I retrieve the intial object via queryForObject. The next two queries are being executed when I attempt to access the List which stores the related objects from the main object. I am very curious what is going on since I don't know how Ibatis could even know what query to execute to get the items later? The following maps are used to retrive a single instance of classB with all of its classA children stored in one of its properties which is of course a list. resultMap id="getClassAResult" class="classA" ... some basic properties /resultMap resultMap id="getClassBResult" class="classB" result property="primKey1" column="classB.primKey1"/ result property="primKey2" column="classB.primKey2"/ ... some more properties /resultMap resultMap id="getClassBWithClassAsResult" class="classB" extends="getClassBResult" groupBy="primKey1,primKey2" result property="classAs" resultMap="namespace.getClassAResult"/ /resultMap and my select statement... select id="getClassBWithClassAs" parameterClass="keyClass" resultMap="getClassBWithClassAsResult" SELECT classB.*,classA.* FROM classB ,classA WHERE classB.primKey1=#primKey1# AND classB.primKey2=#primKey2# AND gallery_image.SiteId=#siteId# AND gallery_image.BlockId=#blockId# GROUP BY classB.primKey1,classB.primKey2,classA.primKey3 /select__Do You Yahoo!?Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com