resultType与resultMap的区别?


在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap。

resultType:

使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功(数据库,实体,查询字段,这些全部都得一一对应)。而resultType中的内容就是pojo在本项目中的位置。

resultMap:

如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。

总结:

resultType和resultMap功能类似,都是返回对象信息 ,但是resultMap要更强大一些 ,可自定义。因为resultMap要配置一下,表和类的一一对应关系,所以说就算你的字段名和你的实体类的属性名不一样也没关系,都会给你映射出来,但是,resultType就比较鸡肋了,必须字段名一样,比如说 cId和c_id 这种的都不能映射 。

下面介绍几个常用的映射关系:

单表查询:

当使用resultMap做SQL语句返回结果类型处理时,通常需要在mapper.xml中定义resultMap进行pojo和相应表字段的对应。

订单查询关联用户的resultMap

将整个查询的结果映射到cn.itcast.mybatis.po.Orders中

<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">
  
  
  <id column="id" property="id"/>
  <result column="user_id" property="userId"/>
  <result column="number" property="number"/>
  <result column="createtime" property="createtime"/>
  <result column="note" property="note"/>
resultMap>

关联查询(一对一):

resultMap对于一对一表连接的处理方式通常为在主表的pojo中添加嵌套另一个表的pojo,然后在mapper.xml中采用association节点元素进行对另一个表的连接处理。

例如:

订单查询关联用户的resultMap

将整个查询的结果映射到cn.itcast.mybatis.po.Orders中

<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">
  
  
  <id column="id" property="id"/>
  <result column="user_id" property="userId"/>
  <result column="number" property="number"/>
  <result column="createtime" property="createtime"/>
  <result column="note" property=note/>
  
  <association property="user" javaType="cn.itcast.mybatis.po.User">
    
    <id column="user_id" property="id"/>
    <result column="username" property="username"/>
    <result column="sex" property="sex"/>
    <result column="address" property="address"/>
  association>
resultMap>

association:将关联查询信息映射到一个pojo对象中

关联查询(一对多):

resultMap的处理方式为在订单表数据的pojo中添加一个list,list中为订单明细表的属性,在mapper.xml中采用如下的处理方式:

订单及订单明细的resultMap

使用extends继承,不用在中配置订单信息和用户信息的映射

<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">
              <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">          <id column="orderdetail_id" property="id"/>     <result column="items_id" property="itemsId"/>     <result column="items_num" property="itemsNum"/>     <result column="orders_id" property="ordersId"/>   collection> resultMap>

collection:将关联查询信息映射到一个list集合中。