概述
ps.本文主要是对于上一篇博客的补充,主要是对于映射文件的拓展。
MyBatis在映射文件中加载关联关系对象主要通过两种方式:嵌套查询和嵌套结果。
嵌套查询是指通过执行另外一条SQL映射语句来返回预期的复杂类型;
嵌套结果是使用嵌套结果映射来处理重复的联合结果的子集。开发人员可以使用上述任意一种方式实现对关联关系的加载。
那么这两者之间有什么联系?
如何理解这些区别呢?????
咱们直接代码来说话。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zsj.mapper.PersonMapper">
<!-- 嵌套查询:通过执行另外一条SQL映射语句来返回预期的特殊类型 -->
<select id="findPersonById" parameterType="Integer"
resultMap="IdCardWithPersonResult">
SELECT * from tb_person where id=#{id}
</select>
<resultMap type="Person" id="IdCardWithPersonResult">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
<result property="sex" column="sex" />
<!-- 一对一:association使用select属性引入另外一条SQL语句 -->
<association property="card" column="card_id" javaType="IdCard"
select="com.zsj.mapper.IdCardMapper.findCodeById" />
</resultMap>
<!-- 嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集 -->
<select id="findPersonById2" parameterType="Integer"
resultMap="IdCardWithPersonResult2">
SELECT p.*,idcard.code
from tb_person p,tb_idcard idcard
where p.card_id=idcard.id
and p.id= #{id}
</select>
<resultMap type="Person" id="IdCardWithPersonResult2">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
<result property="sex" column="sex" />
<association property="card" javaType="IdCard">
<id property="id" column="card_id" />
<result property="code" column="code" />
</association>
</resultMap>
</mapper>
输出结果:
嵌套查询:
嵌套结果:
从上面的调试日志可以看出,两者不同方式的查询SQL语句的难易程度和语句数。并且从代码中不难看出两者在编写SQL语句代码方面不同,嵌套查询相较于嵌套结果来说,编写较简单!!!
希望可以帮到大家,有什么措辞不正确,希望得到指正。
参考文献:
MyBatis官方文档
最后
以上就是潇洒黑裤为你收集整理的探索嵌套查询和嵌套结果这对孪生子的秘密!!!的全部内容,希望文章能够帮你解决探索嵌套查询和嵌套结果这对孪生子的秘密!!!所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复