在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解

resultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置。

因此对于单表查询的话用resultType是最合适的。但是,如果在写pojo时,不想用数据库表中定义的字段名称,也是可以使用resultMap进行处理对应的。多表连接查询时,若是一对一的连接查询,那么需要新建一个pojo,pojo中包括两个表中需要查询出的所有的字段,这个地方的处理方式通常为创建一个继承一个表字段的pojo,再在里面添加另外一个表内需要查询出的字段即可。若是一对多查询时,若是使用内连接查询,则很可能出现查询出的字段有重复。使用双重for循环嵌套处理即可。

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

  1. <!-- 订单查询关联用户的resultMap
  2.  
  3. 将整个查询的结果映射到cn.itcast.mybatis.po.Orders中
  4.  
  5. -->
  6.  
  7. <resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">
  8.  
  9. <!-- 配置映射的订单信息 -->
  10.  
  11. <!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id
  12.  
  13. column:订单信息的唯 一标识 列
  14.  
  15. property:订单信息的唯 一标识 列所映射到Orders中哪个属性
  16.  
  17. -->
  18.  
  19. <id column="id" property="id"/>
  20.  
  21. <result column="user_id" property="userId"/>
  22.  
  23. <result column="number" property="number"/>
  24.  
  25. <result column="createtime" property="createtime"/>
  26.  
  27. <result column="note" property="note"/>
  28.  
  29. </resultMap>

  

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

  1. <!-- 订单查询关联用户的resultMap
  2.  
  3. 将整个查询的结果映射到cn.itcast.mybatis.po.Orders中
  4.  
  5. -->
  6.  
  7. <resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">
  8.  
  9. <!-- 配置映射的订单信息 -->
  10.  
  11. <!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id
  12.  
  13. column:订单信息的唯 一标识 列
  14.  
  15. property:订单信息的唯 一标识 列所映射到Orders中哪个属性
  16.  
  17. -->
  18.  
  19. <id column="id" property="id"/>
  20.  
  21. <result column="user_id" property="userId"/>
  22.  
  23. <result column="number" property="number"/>
  24.  
  25. <result column="createtime" property="createtime"/>
  26.  
  27. <result column="note" property="note"/>
  28.  
  29. </resultMap>

  

若是一对多的表连接方式,比如订单表和订单明细表即为一对多连接,若是不对sql语句进行处理,由于一个订单对应多条订单明细,因此查询出的结果对于订单表数据来说将会出现重复,例如:

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

  1. <!-- 订单查询关联用户的resultMap
  2.  
  3. 将整个查询的结果映射到cn.itcast.mybatis.po.Orders中
  4.  
  5. -->
  6.  
  7. <resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">
  8.  
  9. <!-- 配置映射的订单信息 -->
  10.  
  11. <!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id
  12.  
  13. column:订单信息的唯 一标识 列
  14.  
  15. property:订单信息的唯 一标识 列所映射到Orders中哪个属性
  16.  
  17. -->
  18.  
  19. <id column="id" property="id"/>
  20.  
  21. <result column="user_id" property="userId"/>
  22.  
  23. <result column="number" property="number"/>
  24.  
  25. <result column="createtime" property="createtime"/>
  26.  
  27. <result column="note" property="note"/>
  28.  
  29. </resultMap>

  

在查询时,虽然一条订单信息对应多条订单明细,由于将多条信息明细存储到了list中,因此查询后将不再出现重复数据,达到了去重的效果

尊重原创,原文地址:http://blog.csdn.net/fengbird/article/details/50947150

转载:ResultMap和ResultType在使用中的区别的更多相关文章

  1. ResultMap和ResultType在使用中的区别

    在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使 ...

  2. ResultMap和ResultType在使用中的区别、MyBatis中Mapper的返回值类型

    在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使 ...

  3. ResultMap和ResultType到底有什么区别?

    转载请标明出处:https://www.cnblogs.com/Dreamice/ 首先,SQL语句执行后返回的结果可以使用 Map 存储,也可以使用 POJO 存储. 一.使用Map存储结果集 下面 ...

  4. mybatis的resultMap与resultType的区别

    一.概述MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部Res ...

  5. mybatis中的resultMap与resultType、parameterMap与 parameterType的区别

    Map:映射:Type:Java类型 resultMap 与 resultType.parameterMap 与  parameterType的区别在面试的时候被问到的几率非常高,项目中出现了一个小b ...

  6. Mybatis使用时 resultMap与resultType、parameterMap与 parameterType的区别

    Map:映射:Type:Java类型  resultMap 与 resultType.parameterMap 与  parameterType的区别在面试的时候被问到的几率非常高,出现的次数到了令人 ...

  7. Mybatis中resultMap与resultType区别

    MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultM ...

  8. Mybatis第七篇【resultMap、resultType、延迟加载】

    resultMap 有的时候,我们看别的映射文件,可能看不到以下这么一段代码: <resultMap id="userListResultMap" type="us ...

  9. MySQL 和 Oracle 在 MyBatis 使用中的区别

    MySQL 和 Oracle 在 MyBatis 使用中的区别: 区别 MySQL Oracle 存储过程的参数模式 mode 为 IN 时,是否需要指定 jdbcType 不需要:MyBatis 为 ...

随机推荐

  1. 20181101_将WCF寄宿到控制台

    使用管理员权限打开VS2017 2. 创建以下代码进行测试: a)         创建一个空白解决方案 b)         创建三个类库文件 c)         IMathService代码如下 ...

  2. C++获取Lua全局变量和执行Lua多参数多返回值函数

    C++代码: // LuaAndC.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #i ...

  3. requests的响应返回值显示content和text方法的区别

    requests的get或者post请求,返回的响应response获取方法:content和text content用于获取图片,返回二进制数据 text用于获取内容,返回的是unicode解码字符 ...

  4. table 1PX 边框

    .role_mod_tab{border:1px solid #E8E8E8; width:100%; color:#181818; font-size:14px; cellspacing:0; ce ...

  5. elastic(10) 基本查询

    # 指定index名以及type名的搜索 GET /library/books/_search?q=title:elasticsearch # 指定index名没有type名的搜索 GET /libr ...

  6. FPGA---ucf文件语法

    1.约束文件的概念 FPGA设计中的约束文件有3类:用户设计文件(.UCF文件).网表约束文件(.NCF文件)以及物理约束文件(.PCF文件),可以完成时序约束.管脚约束以及区域约束.3类约束文件的关 ...

  7. SpringMVC总结二:Controller的请求映射方式(RequestMapping)简单介绍

    在SpringMVC总结一:快速入门的基础上简单介绍一下请求映射的方式: 1,标准映射规则 1. @RequestMapping可以设置在类上,也可以设置在方法上 2. 请求的映射规则是:类上的Req ...

  8. 并发之AbstractQueuedLongSynchronize----AQS

    一概述 谈论到并发,不得不谈论锁,而谈论到锁而言,又离不开ReentrantLock.ReentrantLock是锁锁的一种实现方式,对于锁而言,我们这里就需要讨论到AQS,即上面的AbstractQ ...

  9. 【bzoj3670】[Noi2014]动物园

    3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2080  Solved: 1107[Submit][Status ...

  10. php 实现百度文库搭建

    第一步:安装jodconverter,安装之后可以实现doc文档转成pdf. 文件下载地址为http://www.artofsolving.com/opensource/jodconverter 下载 ...