mybatis映射结果集association的配置
老师,在视频中发现一处mybatis的映射配置:
1 2 3 4 5 6 7 8 9 10 11 | < 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 > |
其中,这里的:
1 2 3 4 | < association property = "department" column = "department_sn" javaType = "Department" > < id property = "sn" column = "dsn" javaType = "String" /> < result property = "name" column = "dname" javaType = "String" /> </ association > |
是查询并且返回员工的部门对象
这里的column是关联部门数据表的字段名
视频中说column的值不能和前面的column一样,所以这里加了前缀d,即dsn、dname,那这样怎么可以关联到数据表呢?property关联的是JavaBean属性名,可以重复,那column是关联的是数据表字段名,万一部门数据表的这两个字段名就是sn和name呢?数据表怎么认识dsn、dname这两个名字并和自身字段名对应起来啊?
为什么这里的column属性不能和前面的result里的column值一样啊?
association这个标签难道默认就是一个查询并返回result的操作么?这里没有显式根据sn和name两个参数来查部门数据封并装成对象返回啊,就这样指明了映射关系,就直接返回对象了?
正在回答
同学你好。在回答问题之前,先明确,我们组装这个resultMap是为了一次性将Employee对象的属性,包括关联的Department属性,通过一次关联查询映射到位,我们要做的查询语句是什么样的:
1、这里的column对应的并不是真正的表中的列名,而是查询出的结果集的列名。例如上面的查询sql中有“d.sn dsn, d.name dname”
使用<association>将Department类关联过来,关联的部分有二,一是Department的主键对应的属性sn,在结果集中对应的列名为dsn。二是Department的属性name对应的结果集中的列名dname。
2、因为我们要做联表查询,要在同一个结果集中展现e表的sn和d表的sn。为了区分,才将它设置的不同
3、resultMap的作用是将多张表联合查询的结果集中的字段,自动对应到对应的实体(包括主实体和其中嵌套的关联实体)中,其中association标签是用来指明关联的类以及需要自动填充进入的字段的
1 2 3 4 5 6 7 8 9 | <!--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 > |
如果解答了同学的疑问,望采纳~
祝学习愉快~
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧