设为首页 收藏本站
查看: 931|回复: 0

[经验分享] MyBatis association的两种形式

[复制链接]

尚未签到

发表于 2016-11-25 09:12:42 | 显示全部楼层 |阅读模式
  一、嵌套的resultMap

      这种方法本质上就是上篇博文介绍的方法,只是把教师实体映射从association元素中提取出来,用一个resultMap元素表示。然后association元素再引用这个resultMap元素。修改上篇博文示例的StudentMapper.xml如下:

<?xml version="1.0" encoding="utf8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.abc.mapper.StudentMapper">
<select id="getById" parameterType="int"  resultMap="studentResultMap">
select s.id s_id,  
s.name s_name,  
s.gender s_gender,  
s.major s_major,  
s.grade s_grade,  
t.id t_id,  
t.name t_name,  
t.gender t_gender,  
t.title t_title,  
t.research_area t_research_area  
from student s left join teacher t  
on s.supervisor_id = t.id  
where s.id=#{id}  
</select>
<resultMap id="studentResultMap" type="Student">
<id property="id" column="s_id"/>
<result property="name" column="s_name"/>
<result property="gender" column="s_gender"/>
<result property="major" column="s_major"/>   
<result property="grade" column="s_grade"/>
<!--使用resultMap属性引用下面的教师实体映射-->
<association property="supervisor" javaType="Teacher"
resultMap="supervisorResultMap"/>
</resultMap>
<!--教师实体映射-->
<resultMap id="supervisorResultMap" type="Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
<result property="gender" column="t_gender"/>
<result property="researchArea" column="t_research_area"/>   
<result property="title" column="t_title"/>
</resultMap>
</mapper>
 

 在这里,为了让select语句更加清晰可读,每个字段都使用了别名。association元素的属性javaType="Teacher"可以不要,不像上篇博文示例那样,没有此属性即报错。这大概是因为引用的resultMap元素已经指明了映射的类型为“Teacher”。另外,今天偶然发现,把StudentMapper.xml的encoding属性由“UTF-8”改为“utf8”即可添加中文注释。

      运行结果如下:

 
DSC0000.png


      这种方式的好处是此resultMap元素可在其它地方被重用(可在博文下方附件下载处下载示例源码)。
  二、嵌套的select语句

      这种方式是使用一条单独的select语句来加载关联的实体(在本例中就是教师实体),然后在association元素中引用此select语句。修改StudentMapper.xml如下:

<?xml version="1.0" encoding="utf8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.abc.mapper.StudentMapper">
<select id="getById" parameterType="int"  resultMap="studentResultMap">
select id,name,gender,major,grade,supervisor_id from student where id=#{id}  
</select>
<select id="selectSupervisor" parameterType="int"  resultMap="supervisorResultMap">
select id,name,gender,title,research_area  
from teacher where id=#{id}  
</select>
<resultMap id="studentResultMap" type="Student">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="gender" column="gender"/>
<result property="major" column="major"/>   
<result property="grade" column="grade"/>
<!--column="supervisor_id"不能少。此列的值作为参数  
传递给要引用的select语句,用来查询相应学生的指导教师  
的信息。select属性指定要引用的select语句-->
<association property="supervisor" javaType="Teacher"
column="supervisor_id" select="selectSupervisor"/>
</resultMap>
<!--教师实体映射-->
<resultMap id="supervisorResultMap" type="Teacher">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="gender" column="gender"/>
<result property="researchArea" column="research_area"/>   
<result property="title" column="title"/>
</resultMap>
</mapper>
 
  association元素的属性javaType="Teacher"也可以不要,这大概也是因为引用的select语句中已经指明了要用到的resultMap。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305286-1-1.html 上篇帖子: SpringMVC+mybatis+DWR3注解 下篇帖子: 【mybatis】IF判断的坑
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表