association的关联问题(希望老师能仔细回答一下,谢谢)

association的关联问题(希望老师能仔细回答一下,谢谢)

http://img1.sycdn.imooc.com//climg/5cfdd5d50001c4a812810636.jpg

还是这个问题,对于初学者来说,理解真的很困难,希望老师能仔细讲解一下。

第一个问题:到底是怎么把Employee中的department属性相关联的 。为什么assocation中要写这两个映射标签,对于我最初的理解,我觉得这个映射写下来的作用仅仅是为了下面的查询操作所做的一个别名而已,还有就是下面的查询操作,查询出来的是e表的5个字段和d表的两个字段,那查询的select难道一定非要是这七个字段的组合吗?如果是,那查询的结果为什么一定是这7个字段的组合呢?(一直跟着老师的思路走,但停下来自己想想,就想不明了白)如果不是,那上面的association标签的映射关系写下来又有何意义呢?

第二个问题:在添加员工信息的时候http://img1.sycdn.imooc.com//climg/5cfdd8510001cc1914130043.jpg

当提交的时候,departmentSn就会得到所对用的编号值,在查询的时候http://img1.sycdn.imooc.com//climg/5cfdd89600013c1906830038.jpg

通过这个方式可以得到部门的名字,那么,是不是只要有在Employee中有departmentSn这个属性,我就能得到Employee的这个department属性的呢?如果是这样的,那程序又是怎么通过这个departmentSn来把这个Employee的department属性赋值的呢?是不是也可以通过emp.department.name    emp.department.sn  emp.department.address来获取它对应这三个属性了呢?


也是最后一个案例了,希望老师能好好解答一下,谢谢




正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好。resultMap的作用是将多张表联合查询的结果集中的字段,自动对应到对应的实体(包括主实体和其中嵌套的关联实体)中:

<!--column对应的是结果集的列名,不是原表的。property是对应实体的属性名。-->
<resultMap id="唯一的标识" type="映射的对象类型">
  <id column="主表的主键列名" jdbcType="字段类型" property="映射对象的主键属性" />
  <result column="主表的对应属性列名" jdbcType="字段类型" property="映射对象的属性"/>
  <association property="主对象中存储关联对象的属性名" javaType="关联的实体对象类型">
    <id column="关联表的主键对应的结果集中的列名" jdbcType="字段类型" property="关联对象的主键属性"/>
    <result  column="关联表的属性对应的结果集中的列名" jdbcType="字段类型" property="关联对象的属性"/>
  </association>
</resultMap>

所以如下代码组装了一个id为employee的resultMap,它对应的实体类型是Employee。Employee中有一个声明为Department的属性department。所以使用<association>将Department类关联过来,关联的部分有二,一是Department的主键对应的属性sn,在结果集中对应的列名为dsn。二是Department的属性name对应的结果集中的列名dname。

<resultMap id="employee" type="Employee">
    <id property="sn" column="sn" javaType="String"/>
    <result property="password" column="password" javaType="String"/>
    <result property="name" column="name" javaType="String"/>
    <result property="departmentSn" column="department_sn" javaType="String"/>
    <result property="post" column="post" javaType="String"/>
    <association property="department" column="department_sn" javaType="Department" >
        <id property="sn" column="dsn" javaType="String"/>
        <result property="name" column="dname" javaType="String"/>
    </association>
</resultMap>

如果解答了同学的疑问,望采纳~

祝学习愉快~


  • Simon___ 提问者 #1
    谢谢老师了
    2019-06-11 15:37:57
好帮手慕阿满 2019-06-10 16:47:32

关于同学的问题,有如下的解释:

1、resultMap是将实体类中的属性和数据库中的字段对应起来,所以在resultMap标签中,前5个都是属性和字段的对应关系,如:

http://img1.sycdn.imooc.com/climg/5cfe14440001f1d109620275.jpg

association是关联查询,在employee表中,有外键字段department_sn关联department表,所以association就是实现查询employee时的同时查询出员工的department。在employee表和department表中都有sn和name字段,如果都写name和sn,分不清是那个表的字段,所以在查询时,给字段起了别名,在association中,column使用别名。如:

http://img1.sycdn.imooc.com/climg/5cfe16bf0001945312550410.jpg

2、添加员工信息时,员工所属部门的值存在departmentSn中,然后在Employee.xm中,通过字段的对应关系,会将departmentSn的值存入到department_sn字段中。而数据库中department_Sn中通过外键关联 ,将employee和department关联起来。所以在设置了正确的association关联后,可以通过employee的departmentSn获取department的id,name等。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 Simon___ #1
    (。在employee表和department表中都有sn和name字段,如果都写name和sn,分不清是那个表的字段,所以在查询时,给字段起了别名)老师的这段话:在mysql中如果有两个表有相同字段名称的话会用表名.字段名的方式区分啊,在这里怎么会区分不开一定要设置别名呢
    2019-06-10 19:05:46
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
SSM主流框架入门与综合项目实战2018版
  • 参与学习           人
  • 提交作业       205    份
  • 解答问题       4317    个

Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师