Mybatis结果集自动映射

本文详细介绍了Mybatis的结果集自动映射功能,包括源码分析、示例、自动映射策略和resultType自动映射的分析。默认情况下,Mybatis会对未在resultMap中定义的字段进行自动映射,这一过程可以通过全局配置`autoMappingBehavior`来调整。文中还给出了示例,展示了如何在XML映射文件中使用resultType实现自动映射。
摘要由CSDN通过智能技术生成

Mybatis结果集自动映射

 

       在使用Mybatis时,有的时候我们可以不用定义resultMap,而是直接在<select>语句上指定resultType。这个时候其实就用到了Mybatis的结果集自动映射。Mybatis的自动映射默认是开启的,其在映射的时候会先把没有在resultMap中定义字段映射的字段按照名称相同的方式自动映射到返回类型的对应属性上。自动映射的时候会忽略大小写,比如查询语句中查询出来了一个字段是ID,我们对应的返回类型有一个属性id,且有一个setId()方法,那么id跟ID也是可以匹配的,是可以自动映射的,Mybatis就会把查询出来的结果集中字段ID对应的值赋给返回类型对象的id属性。

 

7.1     源码分析

       关于自动映射这块的逻辑规则可以参考Mybatis的DefaultResultSetHandler的源码,其核心代码如下。

  private boolean applyAutomaticMappings(ResultSetWrapper rsw, ResultMap resultMap, MetaObject metaObject, String columnPrefixthrows SQLException {

    List<UnMappedColumAutoMapping> autoMapping = createAutomaticMappings(rswresultMapmetaObjectcolumnPrefix);

    boolean foundValues false;

    if (autoMapping.size() > 0) {

      for (UnMappedColumAutoMapping mapping autoMapping) {

        final Object value mapping.typeHandler.getResult(rsw.getResultSet(), mapping.column);

        if (value != null || configuration.isCallSettersOnNulls()) {

          if (value != null || !mapping.primitive) {

            metaObject.setValue(mapping.propertyvalue);

          }

          foundValues true;

        }

      }

    }

    return foundValues

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值