20、结果集映射之一对多关联映射
来源:互联网 发布:怎样变更淘宝店的地区 编辑:程序博客网 时间:2024/06/08 01:56
多对一
多个博客对应一个作者
作者
public class Author { private Integer id; private String username; private String password; private String email; private String bio; private String favouriteSection;}
博客
public class Blog { private Integer id; private String title; private Integer authorId; private Author author;}
省略get和set方法
关联
关联中不同的是你需要告诉 MyBatis 如何加载关联。MyBatis 在这方面会有两种不同的 方式:
- 嵌套查询:通过执行另外一个 SQL 映射语句来返回预期的复杂类型。
- 嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集。首先,然让我们来查看这个元素的属性。所有的你都会看到,它和普通的只由 select 和
resultMap 属性的结果映射不同。
关联的嵌套查询
对应的resultMap
<resultMap id="manyToOne2" type="Blog" extends="BaseResultMap"> <association property="author" javaType="Author" column="author_id" select="selectByPrimaryKey2"> </association> </resultMap>
SQL语句
<select id="selectByPrimaryKey2" parameterType="java.lang.Integer" resultMap="author"> SELECT * FROM author WHERE id = #{id,jdbcType=INTEGER} </select> <select id="manyToOne2" resultMap="manyToOne2"> select <include refid="Base_Column_List"/> from blog where id = #{id,jdbcType=INTEGER} </select>
我们有两个查询语句:一个来加载博客,另外一个来加载作者,而且博客的结果映射描 述了“selectAuthor”语句应该被用来加载它的 author 属性。
其他所有的属性将会被自动加载,假设它们的列和属性名相匹配。
这种方式很简单, 但是对于大型数据集合和列表将不会表现很好。
问题就是我们熟知的 “N+1 查询问题”。概括地讲,N+1 查询问题可以是这样引起的:
1. 你执行了一个单独的 SQL 语句来获取结果列表(就是“+1”)。
2. 对返回的每条记录,你执行了一个查询语句来为每个加载细节(就是“N”)。
3. 这个问题会导致成百上千的 SQL 语句被执行。这通常不是期望的。
关联的嵌套结果
对应的resultMap
<resultMap id="BaseResultMap" type="com.lf.entity.Blog"> <id column="id" jdbcType="INTEGER" property="id"/> <result column="title" jdbcType="VARCHAR" property="title"/> <result column="author_id" jdbcType="INTEGER" property="authorId"/> </resultMap> <resultMap id="author" type="com.lf.entity.Author"> <id column="id" jdbcType="INTEGER" property="id" javaType="int"/> <result column="username" jdbcType="VARCHAR" property="username" javaType="string"/> <result column="password" jdbcType="VARCHAR" property="password"/> <result column="email" jdbcType="VARCHAR" property="email"/> <result column="bio" jdbcType="VARCHAR" property="bio"/> <result column="favourite_section" jdbcType="VARCHAR" property="favouriteSection"/> </resultMap> <resultMap id="manyToOne" type="Blog" extends="BaseResultMap"> <association property="author" javaType="Author" column="author_id" resultMap="author"> </association> </resultMap>
SQL语句
<select id="manyToOne" resultMap="manyToOne"> SELECT a.id, a.username, a.email, a.bio, a.favourite_section, b.id, b.title, b.author_id AS authorId FROM author a RIGHT JOIN blog b ON a.id = b.author_id WHERE b.id = #{id,jdbcType=INTEGER} </select>
阅读全文
0 0
- 20、结果集映射之一对多关联映射
- Hibernate关联映射之一对多单向关联映射
- Hibernate关联映射之一对多、多对多映射
- 05-MyBatis_关联映射之一对多
- Hibernate之一对多关联映射
- Hibernate之一对多关联映射
- MyBatis 关联映射之一对多
- 19、结果集映射之多对一关联映射
- 【Hibernate】(七)关联映射之一对多映射
- Hibernate关联关系映射之一对多关联关系
- Hibernate(1)关联映射之一对多
- 【Hibernate三】关系映射之一对多单项关联
- 【Hibernate四】关系映射之一对多双向关联
- 【Hibernate系列】(六):关联映射之一对多
- SSH框架之Hibernate的关联映射之一对多、多对一映射
- JPA关联映射 - 多对多映射
- Hibernate关联映射--多对一映射
- 技术分析之Hibernate的关联关系映射之一对多映射
- 如何连接远程服务器的MySQL
- Mac上安装MySQL
- js中的面向对象
- leetcode十二周解题报告
- Linux常用命令学习总结三(which,find,文件系统,df,du)
- 20、结果集映射之一对多关联映射
- CXF整合Spring通过tomcat发布webservice
- 前端学习框架
- 一个开始
- BIEE 12c客户化报表导出菜单项
- 21、参数的传递
- 小M开发_java零基础(字母金字塔案例)
- 2017-06-27 第一次写博客
- PDB的plugging和unpluged