不很懂mapper中的一个配置

不很懂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>

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

上面的是源代码为什么是next_deal_sn  ,而不是deal_sn,,,这个next_deal_sn 哪里来的.我都没找到

正在回答

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

4回答

同学你好,非常抱歉,老师没有理解正确同学的意思,这里同学是想说为什么在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"也没有出现问题。

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

理解如下:

    假定通过外键查询学生的年级,可以直接在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并没有具体使用,所以代码没有错,不过为了更加严谨,还要建议书写时能够和表内的外键名称保持一致,视频中略有疏漏,我们会及时反馈给相关人员还请同学多多包涵。

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

好帮手慕小班 2020-02-06 10:42:11

同学你好,resultMap的作用是将多张表联合查询的结果集中的字段,自动对应到对应的实体中,

        id是设置主表的主键列名,和映射对象的主键属性。

        result将数据表中和实体类中名称不同的字段对应起来,比如数据表中的claim_voucher_id
字段,对应实体类中的claimVoucherId。

        association标签是用来指明关联的类以及需要自动填充进入的字段的。association标签中property属性是指主对象中存储关联对象的属性名,column表示数据库的列名或者列标签别名。

而这个sql语句中,报销单表中含有员工表的两个外键,分别是创建人和待处理人,这位两个外键都是连接一个Employee对象。

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

通过next_deal_sn字段的左连接,对应待处理人对应的字段就是next_deal_sn,书写时能够和表内的外键名称保持一致,所以这里写的对应的column数据库字段就是next_deal_sn。

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

  • 提问者 薛定谔的猫迷 #1
    老师我指的是处理方式的表,多表联查的时候不是,应该针对,处理方式表重的deal_sn 外键去对应employee中的sn查询嘛,查询,,嘛
    2020-02-06 12:37:14
好帮手慕小班 2020-02-05 20:03:21

同学你好,这里DealRecordDao同学是哪里不理解,是查询时两个连接的sql语句这里不理解吗,如果是,这里可以这样理解:

    报销单表中含有员工表的两个外键,分别是创建人和待处理人。报销单表的待处理人同样是要左连接员工表,两个表才可以进行关联查询:

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

所以这两个外键都用了association 来查询表示

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

如果同学想表述的不是这个意思,还麻烦同学具体描述一下。

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

  • 提问者 薛定谔的猫迷 #1
    <association property="dealer" column="next_deal_sn" javaType="Employee"> <result property="name" column="ename" javaType="String"/> <result property="post" column="epost" javaType="String"/> </association> 不太明白这句的column="next_deal_sn"
    2020-02-05 20:20:52
  • 提问者 薛定谔的猫迷 #2
    是DealRecordDao.xml中的 <association property="dealer" column="deal_sn" javaType="Employee"> <result property="name" column="ename" javaType="String"/> <result property="post" column="epost" javaType="String"/> </association>
    2020-02-05 20:22:06
好帮手慕小班 2020-02-05 18:25:46

同学你好,这里报销单表中含有员工表的两个外键,分别是创建人和待处理人,对应的next_deal_sn就是claim_voucher表中的字段。

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

对应在sql中:

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

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

  • 提问者 薛定谔的猫迷 #1
    老师,这个DealRecordDao里面的,这样写.我不是很其意思
    2020-02-05 18:28:07
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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