不很懂mapper中的一个配置
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.imooc.oa.dao.DealRecordDao"> <resultMap id="deal_record" type="DealRecord"> <id property="id" column="id" javaType="Integer"/> <result property="claimVoucherId" column="claim_voucher_id" javaType="Integer"/> <result property="dealSn" column="deal_sn" javaType="String"/> <result property="dealTime" column="deal_time" javaType="java.util.Date"/> <result property="dealWay" column="deal_way" javaType="String"/> <result property="dealResult" column="deal_result" javaType="String"/> <result property="comment" column="comment" javaType="String"/> <association property="dealer" column="next_deal_sn" javaType="Employee"> <result property="name" column="ename" javaType="String"/> <result property="post" column="epost" javaType="String"/> </association> </resultMap>
上面的是源代码为什么是next_deal_sn ,而不是deal_sn,,,这个next_deal_sn 哪里来的.我都没找到
正在回答
同学你好,非常抱歉,老师没有理解正确同学的意思,这里同学是想说为什么在DealRecordDao.xml的association里deal_record表中没有next_deal_sn字段,但为什么这里column的内容是next_deal_sn字段吧
这里的next_deal_sn 可以是deal_sn也可以是next_deal_sn,没有出现错误,这是因为next_deal_sn没有被实际用到,所以写为column="next_deal_sn"也没有出现问题。
理解如下:
假定通过外键查询学生的年级,可以直接在association内完成通过外键完成查询,那么此时的column就必须是书写正确的和表内的一致,例如:
<resultMap type="Student" id="studentResult"> <id property="id" column="id"/> <association property="grade" column="gradeId" select="com.imooc.dao.GradeDao.getGrade"> </association> </resultMap>
但是也可以使用复合查询,即:
<resultMap type="Student" id="studentResult"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> <association property="grade" column="gradeId" javaType="Grade"> <id property="id" column="id"/> <result property="name" column="name"/> </association> </resultMap> <select id="getStudent" resultMap="studentResult"> SELECT * FROM student LEFT OUTER JOIN grade ON grade.id=student.gradeId WHERE student.id=#{id} </select>
此时这个column="gradeId"就不会被真正使用到,所以此时在运行起来就没有上面一种方法严格,这个地方也可以不写column="gradeId"。
在视频中视频中DealRecordDao.xml就是使用的第二种方式,复合查询的方式实现的,所以column="next_deal_sn"中的next_deal_sn并没有具体使用,所以代码没有错,不过为了更加严谨,还要建议书写时能够和表内的外键名称保持一致,视频中略有疏漏,我们会及时反馈给相关人员还请同学多多包涵。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
同学你好,resultMap的作用是将多张表联合查询的结果集中的字段,自动对应到对应的实体中,
id是设置主表的主键列名,和映射对象的主键属性。
result将数据表中和实体类中名称不同的字段对应起来,比如数据表中的claim_voucher_id
字段,对应实体类中的claimVoucherId。
association标签是用来指明关联的类以及需要自动填充进入的字段的。association标签中property属性是指主对象中存储关联对象的属性名,column表示数据库的列名或者列标签别名。
而这个sql语句中,报销单表中含有员工表的两个外键,分别是创建人和待处理人,这位两个外键都是连接一个Employee对象。
通过next_deal_sn字段的左连接,对应待处理人对应的字段就是next_deal_sn,书写时能够和表内的外键名称保持一致,所以这里写的对应的column数据库字段就是next_deal_sn。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星