美文网首页问题集锦
Mybatis-数据库数据查出但是未返回到结果集

Mybatis-数据库数据查出但是未返回到结果集

作者: 五城十九洲 | 来源:发表于2020-03-04 14:56 被阅读0次
        <select id="selectByParams" resultType="order">
            select
            <include refid="Base_Column_List" />
            from order
            where id = #{id,jdbcType=BIGINT}
        </select>
    

    上下两块代码块区别在于resultType和resultMap。

        <select id="selectByParams" resultMap="BaseResultMap">
            select
            <include refid="Base_Column_List" />
            from order
            where id = #{id,jdbcType=BIGINT}
        </select>
        </select>
    

    当sql查出数据sql参数字段和实体字段不匹配时就会错误,无法将结果集匹配set

    具体源码:

    private List<UnMappedColumnAutoMapping> createAutomaticMappings(ResultSetWrapper rsw, ResultMap resultMap, MetaObject metaObject, String columnPrefix) throws SQLException {
        final String mapKey = resultMap.getId() + ":" + columnPrefix;
        List<UnMappedColumnAutoMapping> autoMapping = autoMappingsCache.get(mapKey);
        if (autoMapping == null) {
          autoMapping = new ArrayList<UnMappedColumnAutoMapping>();
          final List<String> unmappedColumnNames = rsw.getUnmappedColumnNames(resultMap, columnPrefix);
          for (String columnName : unmappedColumnNames) {
            String propertyName = columnName;
            if (columnPrefix != null && !columnPrefix.isEmpty()) {
              // When columnPrefix is specified,
              // ignore columns without the prefix.
              if (columnName.toUpperCase(Locale.ENGLISH).startsWith(columnPrefix)) {
                propertyName = columnName.substring(columnPrefix.length());
              } else {
                continue;
              }
            }
            final String property = metaObject.findProperty(propertyName, configuration.isMapUnderscoreToCamelCase());
            //匹配是否有结果map 或者实体是否能获取到set方法
            if (property != null && metaObject.hasSetter(property)) {
              if (resultMap.getMappedProperties().contains(property)) {
                continue;
              }
              final Class<?> propertyType = metaObject.getSetterType(property);
              if (typeHandlerRegistry.hasTypeHandler(propertyType, rsw.getJdbcType(columnName))) {
                final TypeHandler<?> typeHandler = rsw.getTypeHandler(propertyType, columnName);
                autoMapping.add(new UnMappedColumnAutoMapping(columnName, property, typeHandler, propertyType.isPrimitive()));
              } else {
                configuration.getAutoMappingUnknownColumnBehavior()
                    .doAction(mappedStatement, columnName, property, propertyType);
              }
            } else {
              configuration.getAutoMappingUnknownColumnBehavior()
                  .doAction(mappedStatement, columnName, (property != null) ? property : propertyName, null);
            }
          }
          autoMappingsCache.put(mapKey, autoMapping);
        }
        return autoMapping;
      }
    
    

    相关文章

      网友评论

        本文标题:Mybatis-数据库数据查出但是未返回到结果集

        本文链接:https://www.haomeiwen.com/subject/smbvlhtx.html