本文共 2948 字,大约阅读时间需要 9 分钟。
文章介绍了基于Mybatis对数据库的增、删、改、查。这一篇介绍下关联查询(join query)。
三张表:user article blog
表的存储sql文件:
配置文件Configuration.xml
User类的定义和User.xml的配置见上一文章。
Article类定义:
Article类中有一个User类。
Article.xml的配置:
Blog类定义:
Blog类中有一个List<Article>。
Blog.xml配置:
IArticleOperation定义:
package com.mybatis.test;import java.util.List;public interface IArticleOperation { public ListgetUserArticles(int userID);}
IBlogOperation定义:
package com.mybatis.test;public interface IBlogOperation { Blog getBlogByID(int id); }
Test类:
Mybatis的“N+1查询问题”
示例:
有两个查询语句:一个来加载博客,另外一个来加载作者,而且博客的结果映射描述了“selectAuthor”语句应该被用来加载它的 author 属性。
其他所有的属性将会被自动加载,假设它们的列和属性名相匹配。
这种方式很简单,但是对于大型数据集合和列表将不会表现很好。问题就是我们熟知的“N+1 查询问题”。概括地讲,N+1 查询问题可以是这样引起的:
你执行了一个单独的 SQL 语句来获取结果列表(就是“+1”)。
对返回的每条记录,你执行了一个查询语句来为每个加载细节(就是“N”)。
这个问题会导致成百上千的 SQL 语句被执行。这通常不是期望的。
可以采用关联的嵌套结果来解决这个问题:
resultMap 这是结果映射的 ID,可以映射关联的嵌套结果到一个合适的对象图中。这是一种替代方法来调用另外一个查询语句。
代码下载:http://download.csdn.net/detail/luxiaoxun/8056559
参考:
http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html
本文转自阿凡卢博客园博客,原文链接:http://www.cnblogs.com/luxiaoxun/p/4035276.html,如需转载请自行联系原作者