为什么xml文件里面写的返回的数据格式和mapper里面写的返回数据格式不一致

为什么xml文件里面写的返回的数据格式和mapper里面写的返回数据格式不一致

为什么xml文件里面写的返回的数据格式和mapper里面写的返回数据格式不一致


https://img1.sycdn.imooc.com//climg/64d8ca6409ee5df716220630.jpg

https://img1.sycdn.imooc.com//climg/64d8ca64093051e308380210.jpg


https://img1.sycdn.imooc.com//climg/64d8caf909df066d12280776.jpg



为什么xml文件里面写的是 

resultType="java.util.LinkedHashMap"

然而在mapper的接口文件中却是List<Map>

LinkedHashMap 不应该是Map的数据类型吗?


正在回答

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

2回答

同学你好,1、Map是接口,是所有以key-value形式存储数据的集合的父接口。而LinkedHashMap是Map接口的实现类,除去接口的特点,还会维护数据存储到集合中的顺序。

2、因LinkedHashMap是Map接口的实现类,所以在mapper接口文件中可以用父接口(Map)接收子接口(LinkedHashMap)的类型数据。

祝学习愉快!

  • AbelZephyr 提问者 #1

    我的意思是 xml返回的是 LinkedHashMap, 但是方法中返回的数据类型却是List的数据类型,然而LinkedHashMap不是List的实现啊,二者没有关系,为什么可以这样书写呢,您的回答虽然很专业,但是答非所问

    2023-08-14 11:20:14
  • 好帮手慕小尤 回复 提问者 AbelZephyr #2

    同学你好,老师重新提交一个回答,同学可以刷新看一下。

    祝学习愉快!

    2023-08-14 12:09:24
  • AbelZephyr 提问者 回复 好帮手慕小尤 #3

    好的,谢谢老师,老师回答的内容很丰富,我去慢慢想一下,应该可以给我答疑解惑,谢谢

    2023-08-14 14:02:42
好帮手慕小尤 2023-08-14 11:59:45

同学你好,可以先了解一下resultType与mapper接口类返回值的关系。

1、xml中返回类型是通过resultType设置的sql返回值类型,具体将数据是返回一条还是多条并是集合还是对象是根据mapper接口中设置的返回值确定的。如果只是一个实体类对象表示就是一条数据,如果是一个集合表示是多条数据。


    https://img1.sycdn.imooc.com//climg/641c264d09c7798705340132.jpg

    1)下方语句是表示查询employee_id等于***的数据(根据id查询一般只会查询到一条),会返回Employee类型的数据。如果此时查询到了多条数据,则因接口中selectById()方法返回值类型是Employee。则表示返回值只能是一个对象,从而导致只会展示查询到的最后一条数据(最后一条数据会覆盖之前的数据),所以只展示一条数据

<select id="selectById" parameterType="Long" resultType="com.imooc.oa.entity.Employee">
    select * from adm_employee where employee_id = #{value}
</select>

    2)下方xml中虽然设置的返回值是Employee类型,但因接口中的selectByParams()方法返回类型是List<Employee>,则会将返回的Employee对象存储到List集合中,所以最后展示的是多条数据(如果是单条数据也会存储到集合中)

<select id="selectByParams" parameterType="java.util.Map" resultType="com.imooc.oa.entity.Employee">
    select * from adm_employee
    where
        1=1
    <if test="level != null">
        and level = #{level}
    </if>
    <if test="departmentId != null">
        and department_id = #{departmentId}
    </if>
    <if test="title != null">
        and title = #{title}
    </if>

</select>

2、同反馈的截图,返回类型是LinkedHashMap,会将数据存储在LinkedHashMap集合中返回。

https://img1.sycdn.imooc.com//climg/64d9a50209af4d4615220478.jpg

在mapper接口中定义的是List<Map>,就是将返回的数据(LinkedHashMap集合)存储到List集合中。因LinkedHashMap是Map的子接口,所以将泛型设置为Map类型。

https://img1.sycdn.imooc.com//climg/64d9a69f09fbcbef08080174.jpg

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
Java工程师 2024版
  • 参与学习       2020    人
  • 提交作业       1249    份
  • 解答问题       1202    个

2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪

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

在线咨询

领取优惠

免费试听

领取大纲

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