前两天ibatis查询语句中查询的字段没有全部包含resultMap中配置的字段,出了点错,这里给出解决方案,同时说明下ResultMap知识。
     resultmap就是结果集的映射,它将返回的记录与对象进行映射,当然我们可以用resultclass来代替,因为如果字段与属性一模一样的话,查询出来数据集会自动匹配到resultclass指定的类的实例对象,相反,如果字段名与对象属性不同,则该字段不会被返回的实例体类对象接受。
 
      每个resultmap都有id,如果在sqlmap.config中没有配置使用命名空间,那么这个resultemap id是全局的,resultmap一个重要的属性的是class,它将决定这个resultmap对应的实例的类,换
句话讲,它的作用是指出结果集要映射的数据类型。在extends属性中可以设置它将要继承的resultmap,如果给他指定的了值,那么它将会从super resultmap继承所的映射配置字段。定义如
下:
  <resultMap class="dictType" id="typeMap">
 
    <!-- 实体属性:dictTypeId  表字段:DICT_TYPE_ID -->
    <result property="dictTypeId" column="DICT_TYPE_ID" />
    <result property="dictTypeName" column="DICT_TYPE_NAME" />
    <result property="dictTypeRank" column="DICT_TYPE_RANK" />
    <result property="dictTypeParentId" column="DICT_TYPE_PARENT_ID" />
    <result property="dictTypeSeqNo" column="DICT_TYPE_SEQ_NO" />
    <result property="alternateFields" column="ALTERNATE_FIELDS" />
  </resultMap>
说明:
◆columnindex属性提供了我们将数据集的第几个下标字段映射到指定的数据对象属性的方案,但是这种方式应该尽量的少用,它以后的维护和可读性会产生很大的副作用。
◆dbtype属性明确指出这个字段对应的数据库的类型,大多数情况很少会用到。
◆type属性则明确指出这个字段将对应的数据对象属性的数据类型,要保证类型安全的话,设置这个属性是很必要的。
◆resultmapping属性则稍微复杂一些,它是用在一种场景下,如果一个数据类的属性本身不是基元数据类型,而是一个复杂数据类型的话,那我们就不可能很简单地给它一个简单的result元
素就了事了,还必须给他一个完整的resultmap。而resultmapping属性就是为了完成这个功能而存在的。它的属性值是一个已存在的resultmap的id。
◆nullvalue属性指定当前字段的值为null的的默认值。
◆select属性同resultmapping一样比较复杂一样,先说一下它的属性值必须是一个返回数据集合的查询语句的id,能配置这个属性的数据类属性可以是一个基元类型,复合类型,也可以是一
个包括多条数据的集合类型,这些类型都行,没有问题的。它的一处重要的存在意义就在于描述不同表之间的关系问题,通过本次的查询,你想不通过join的手段从另一个表查询相关字段的
时候,你就可以使用select属性。如下:
 
    <select  id="type_select_count" resultClass="int">
   SELECT COUNT(*) FROM EOS_DICT_TYPE
  </select>
使用resultMap的注意事项:
    在使用resultmap的时要特别注意,如果在resultmap中给出的配置字段,但是返回的数据集的时候却没有返回这个字段,那程序将出抛出异常。但是相反的,如果你返回了一些字段,却没有在resultmap给出配置定义的话,那么那些字段将不会被处理而不会给出任何的提示,相当没有查询出这些字段。