association(一对一):映射到JavaBean的某个“复杂类型”属性,比如JavaBean类,即JavaBean,即JavaBean内部嵌套一个复杂数据类型(JavaBean)属性,这种情况就属于复杂类型的关联。但是需要注意:association仅处理一对一的关联关系。

下面通过一个示例来演示association具体的应用,示例需求:查询学生表的全部数据信息。

首先修改Student,增加Grade (Grade实体类只有gid和gname两个属性) 年级属性,并增加响应的getter和setter方法,示例代码如下:

public class Student {private int stuid;private String stuname;private String stupwd;private String stusex;private int stuage;private Grade grade;//省略getter和setter方法 toString和构造器等方法
}

我们的JavaBean:Student对象内部嵌套了一个复杂数据类型的属性:grade。然后在对应的Dao接口中增加获取全部信息的方法:

List<Student> findAll();

修改对应的Mapper映射文件。由于Student对象内嵌JavaBean对象(Grade),因此需要使用association来实现结果映射。代码如下:

<resultMap type="student" id="stumap"><id column="stuid" property="stuid"/><result column="stuname" property="stuname"/><result column="stupwd" property="stupwd"/><result column="stuage" property="stuage"/><result column="stusex" property="stusex"/><!-- 外键列如何表示 --><!-- association描述关系 --><association property="grade" javaType="grade"><id column="gid" property="gid"/><result column="gname" property="gname"/></association>
</resultMap><select id="findAll" resultMap="stumap">select stuid,stuname,stupwd,stuage,grade.gid,gnamefrom grade,studentwhere student.gid=grade.gid
</select>

从上述代码中,简单分析association的属性。
javaType:完整Java类名或别名。
property:映射数据库列的实体对象的属性。
id。设置该项可以有效地提升MyBatis的性能。
result。property:映射数据库列的实体类对象的属性。 column:数据库列名或别名

最后进行测试即可:

@org.junit.Testpublic void selectInfo() {SqlSession session=null;try {session = MyBatisUtils.getSqlSession();StudentDao sd = session.getMapper(StudentDao.class);List<Student> list = sd.findAll();list.forEach(System.out::println);} catch (Exception e) {e.printStackTrace();}finally {MyBatisUtils.closeSqlSession(session);}}

测试结果如下:

虽然我们成功查询到了信息,但是association是没有办法达到复用的,那么它是否可复用?
答案是肯定的,association提供了另一个属性:resultMap。通过这个属性可以扩展一个resultMap来进行联合映射。只需将刚刚的映射文件修改如下即可:

<resultMap type="student" id="stumap"><id column="stuid" property="stuid"/><result column="stuname" property="stuname"/><result column="stupwd" property="stupwd"/><result column="stuage" property="stuage"/><result column="stusex" property="stusex"/><!-- 外键列如何表示 --><!-- association描述关系 --><association property="grade" javaType="grade" resultMap="grademap"></association>
</resultMap><resultMap type="grade" id="grademap"><id column="gid" property="gid"/><result column="gname" property="gname"/>
</resultMap><select id="findAll" resultMap="stumap">select stuid,stuname,stupwd,stuage,grade.gid,gnamefrom grade,studentwhere student.gid=grade.gid
</select>

以上就可以使association达到复用的效果。

resultMap标签中里的association标签相关推荐

  1. 持久层框架Mybatis Plus的ResultMap标签里的association标签的用法

    加入公司差不多快四个月了,对目前手头上的工作内容基本已经熟悉了,现在要对我手头上的后台管理系统进行一个技术升级,后台管理系统前后端不分离,前端使用的是EXTJS框架,后端使用的事Struts2+spr ...

  2. dede中list标签php,dedecms标签中什么表示列表标签

    dedecms标签中什么表示列表标签? dedecms标签中list表示列表标签: 标签名称:list 功能说明:表示列表模板里的分页内容列表 适用范围:仅列表模板 list_*.htm 基本语法:{ ...

  3. html svg标签中插入img image标签不显示的问题

    svg标签中插入img image标签(图片)不显示的问题 1 问题: 在使用svg画图中想要使用img标签插入图片,可以图片不显示 <!--S svg外框 --> <div cla ...

  4. 织梦php页面中调用标签,织梦dede:php标签中调用其他普通标签和页面相关变量及全局配...

    这篇文章主要为大家详细介绍了织梦dede:php标签中调用其他普通标签和页面相关变量及全局配,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴. 织梦dedecms{ ...

  5. vue 中v-if和v-for一起使用;p标签中可以放p标签吗?

    记录一下今天项目中踩的两个坑. 数据是从后台取的,然后通过v-for循环展现出来,由于一些原因,获取到后台返回的值是一个空对象,导致报错.想着直接v-if判断一下对象,如果是空就不编译就不会导致循环空 ...

  6. img标签和p标签是行内元素还是块级元素?以及p标签中可以放img标签吗?

    img标签:行内块元素.类似于 inline-block 可以被p标签包裹.<p><img src="1.jpg"></p> 比如p是居中,图片 ...

  7. python xpath定位 嵌套标签_python爬虫中使用Xpath方法定位a标签中所有的子标签的方法...

    老板扔给了我一个陈年语料,让我通过文章标题回原网址爬取一下对应的doi号,文章很好定位,但是在解析标题的时候遇到了问题,a标签中混合了i.sub.sup标签,在使用xpath时不能直接使用text方法 ...

  8. a标签中可以放其他标签吗?

    参考:在HTML中标签的嵌套规则 1.HTML标签: 块级元素(block): 常用:div.p.ul.ol.li.dl.dt.dd.fieldset.form.h1~h6.hr.table 不常用: ...

  9. struts s标签中的s:select标签用法

    一.常用结构:<s:select  id=""   name=""  value=""  list=""  lis ...

最新文章

  1. java 基础算法教程ppt,基础排序算法(附加java实现)
  2. python中各操作符的优先级_在Python中实现操作符优先级的一般方法是什么
  3. nginx配置文件说明
  4. 谈谈秒杀系统的落地方案
  5. 使用ML.NET + Azure DevOps + Azure Container Instances打造机器学习生产化
  6. python包管理_Python包管理整理:setuptoo
  7. python关系运算符和逻辑运算符的优先级_python中逻辑运算符的优先级问题
  8. M​y​E​c​l​i​p​s​e​下​反​编​译​插​件​安​装​使​用​方​法
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的教材管理系统
  10. 使用requests通过代码实现接口测试自动化
  11. 李宏毅机器学习笔记——Transformer
  12. SAS入门 新手必看
  13. 删库遭 GitHub 封号,开发者欲夺回发行权:“我只是犯了个编程错误”
  14. 利用laravel框架创建todos
  15. 如何理解新技术带来的新资产类别?
  16. 网络版的知乎点赞问题~
  17. [博应用软件]如何正确安装路由器?
  18. 小括号在c语言的作用,C语言的小括号----其实是逗号运算符
  19. JS的3种加密方式:base64编码、md5加密及sha加密
  20. Bug:eventlet ImportError cannot import name ‘ALREADY HANDLED

热门文章

  1. shell编程简单的实例
  2. select简单2级联动
  3. OpenCV 图像处理编程学习笔记
  4. 手把手教你学arm入门篇和提高篇》(ARM视频教程)AA[RMVB]
  5. 复变函数与积分变换matlab,MATLAB在复变函数与积分变换课程教学中的应用
  6. 牛客网暑期ACM多校训练营(第四场) C Chiaki Sequence Reloaded
  7. 医用雾化器方案开发设计
  8. 【实操篇】如何通过吾来平台提升机器人的对话体验?
  9. 中南大学网络教育计算机基础,中南大学网络教育学计算机基础复习题.doc
  10. 肌肉型小腿的瘦腿方案