(一)ResultMap

1,前言

在使用mybatis出现了数据库列名与实体类中属性名不一致的问题,特此记录

2,错误报告

2.1,Mapper.xml文件

    <select id="queryRootById2" resultType="root">
        select root_Id ,root_Pwd from root where root_Id=#{rootId}
    </select>

2.2,实体类:root

public class root {

    private String rootId;
    private String rootPwd;

	...
}

2.3,与之对应的数据库表

对应的数据库

2.4,错误报告

(节选)

错误报告

3,原因:

这是由于实体类中的属性名和数据库中的列名不一致的导致的,

select root_Id ,root_Pwd from root where root_Id=#{rootId}
-- 在这个过程中是有类型处理器将数据中的字段名一个一个映射到实体类的属性名中的,
-- 但他不知道root_Id,root_Pwd该映射给谁?因为实体类中并没有root_Id,root_Pwd这些属性
-- 所以到了最后,程序执行sql语句时会出错

4,解决–ResultMap

而Mybatis给我们提供了解决的方法,Mybatis的官方文档有:
官方文档

4.1,方式一:隐式配置ResultMap

在这些情况下,MyBatis 会在幕后自动创建一个 ResultMap,再根据属性名来映射列到 JavaBean 的属性上。
如果列名和属性名不能匹配上,可以在 SELECT 语句中设置列别名(这是一个基本的 SQL 特性)来完成匹配。

Mapper.xml可以这样改

    <select id="queryRootById2" resultType="root">
             select root_Id as rootId,root_Pwd as rootPwd from root where root_Id=#{rootId}
    </select>

结果:
隐式配置

4.2,方式二:显式配置ResultMap

在学习了上面的知识后,你会发现上面的例子没有一个需要显式配置 ResultMap,这就是 ResultMap 的优秀之处——你完全可以不用显式地配置它们。 虽然上面的例子不用显式配置 ResultMap。 但为了讲解,我们来看看如果在刚刚的示例中,显式使用外部的 resultMap 会怎样,这也是解决列名不匹配的另外一种方式。

Mapper.xml文件可以这样写

    <resultMap id="rootMap" type="root">
        <result column="root_Id" property="rootId"/>
        <result column="root_Pwd" property="rootPwd"/>
    </resultMap>


    <select id="queryRootById2" resultMap="rootMap">
        select * from root where root_Id=#{rootId}
    </select>

结果:
显式配置

5,扩展:

只是这样的ResultMap其实并不能满足开发中的需求,所以~
在这里插入图片描述

未完待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值