事情的起因是这样的:今天在项目中查看mybatis框架的sql语句时候,看到接收参数和返回参数都是Map类型,这使得我突然眼前一亮,因为之前所接触过的传参和返回类型,除了java的常用数据类型之外,就是将传入的参数和返回的数据映射到实体类中。因为之前都没见过接受和返回都是map类型的(可能是因为我经验缺乏,就是短浅啦)。这里附上图片一张:

所以就去查看了一下资料。这里我就真理一下自己的理解。

1:返回数据。

返回为map类型的,其sql查询出来的字段,即为map中的返回字段,map中通过键值对的方式存取这些数据,其key就是sql中所查询的字段,当然,这里需要注意的一点就是,如果此字段为空,那么就不会返回此字段,记住,是不会返回,也就是说在map中的key并不存在这个字段,这个和返回实体类有一点区别,实体类中就算查询出来的数据是空的,也能返回这个字段。

下面是我随便写的一个测试,目的就是看一下返回的字段:

sql语句如下:

1 <select id="testResultMap" resultType="java.util.Map">
2         SELECT
3             student.*,
4             grade.c_fs,
5             grade.c_kc
6         FROM
7             student
8         LEFT JOIN grade ON grade.c_stuId = student.id
9     </select>

student表字段和grade表字段和数据如下:

 

这里为了验证数据为空时候,是否返回此字段,我专门把张三的goTime和李四的语文成绩设为空,下面看返回的数据如下:

[    {        "classes":"五年级一班",        "id":2,        "c_fs":100,        "sex":1,        "c_kc":"数学",        "age":211,        "userName":"张三"    },    {        "classes":"五年级二班",        "id":3,        "goTime":"2018-12-31",        "sex":0,        "c_kc":"语文",        "age":212,        "userName":"李四"    }]

可以看到,字段就是sql里面查询的字段里面张三的goTime和李四的c_fs直接没有返回,这也验证了之前所说的字段为空直接不返回此字段。

2:返回map和返回映射到实体类的优缺点

优点:

  首先从上述代码就直接可以看出来,返回为map类型,使用Map作为接收类型时,通常能够在传参到持久层这一过程中省去很多麻烦。前端请求及参数到达Action或者Controller时通常使用map来进行接收,使用map作为传递类型可以不用再将数据封装为Bean类型再去根据实体属性一一填充,直接通过Service和Dao以map类型将数据传到map配置SQL文件当中,省去很多数据转换环节。

  再执行完SQL语句返回时制定map类型返回,不管是单条数据还是List都可以快速编写并返回给前端。这种方式在处理多表查询时避免了编写大量的实体类和属性字段定义,减少了很多中间流程。

缺点:

  缺点也一样明显,没有了实体类,自己就需要记好map中的key-value映射关系,其次其数据不能像映射到实体类中那样,重写getter方法。当另外一个同事来接手和维护时,因为没有了实体类,他只能通过查询map调试,或者查看才能知晓。也不利于后期的维护。

转载于:https://www.cnblogs.com/FENGXUUEILIN/p/9982293.html

Mybatis返回类型和接收参数为Map类型相关推荐

  1. 【HttpClient】httpclient之post 方法(参数为Map类型)

    1.概述 httpclient之post 方法(参数为Map类型) package httpclient;import java.io.BufferedReader; import java.io.I ...

  2. mybatis传入参数为map时如何在mapper.xml中获取

    有时在开发中难免会遇到传入的参数为map类型的时候, map的key为数据库中的主键或者其他的唯一字段, value为需要进行插入的值,在mybaits的XML文件中进行遍历取出map参数中的值, 有 ...

  3. java vo转map_javabean实体类对象转为Map类型对象的方法(转发)

    //将javabean实体类转为map类型,然后返回一个map类型的值 public static Map beanToMap(Object obj) { Map params = new HashM ...

  4. c++模板 --- 类模板、自定义类型当做模板参数

    生成一个类模板 类中用到了未知类型叫做类模板 用 template 修饰的类,这个类就是一个模板类 多用在数据结构中,忽略类型的问题 只要被 template 修饰,就是一个模板类,有没有用未知类型都 ...

  5. 如何发送和接收参数?五种参数传递方法

    通常情况下,我们可以使用GET或POST来发送请求和数据,但GET和POST两种方法所携带的数据都是比较简单的数据,接下来在我们这个基础上,列举5种比较负责的参数传递方法,并对这些参数如何发送,后台改 ...

  6. mysql mybatis 返回值类型_使用MyBatis时接收值和返回值选择Map类型或者实体类型

    MyBatis作为现近JavaEE企业级项目开发中常用的持久层框架之一,以其简洁高效的ORM映射和高度的SQL的自由性被广大开发人员认可.Mybatis在接收系统传来的参数和返回的参数时主要可以有Ma ...

  7. .net mvc actionresult 返回字符串_072-SpringMVC后端控制器接收参数、处理器方法返回值类型、拦截器、文件上传下载...

    1. 注解式开发之annotation-driven解释 (1) mvc注解驱动在哪个文件中配置? 在springmvc中配置 (2) 配置mvc注解驱动使用哪个标签? 2. 注解式开发之视图解析器 ...

  8. mybatis当输入参数有多个时的解决方案,Map类型,索引引用输入参数,map输出

    Map类型在映射文件中的使用 当输入参数有多个时的解决方案 通过输入参数的索引引用输入参数 需求:通过姓名和地址查询用户信息 输入参数: 姓名 地址 开发: [1]编写接口 [2]映射文件的编写 [3 ...

  9. Map<String,Object>接收参数,Long类型降级为Integer,报类型转换异常

    前言 今天看群里小伙伴问了一个非常有意思的问题: 使用 Map<String,Object> 对象接收前端传递的参数,在后端取参时,因为接口文档中明确该字段类型为 Long ,所以对接收的 ...

最新文章

  1. AngularJS学习笔记(一)
  2. wxWidgets:wxXmlDocument类用法
  3. Tomcat非正常退出导致无法再次启动
  4. excel vba 使用mschart_VBA专题108:使用VBA操控Excel界面之在功能区中添加内置控件...
  5. linux下的shell脚本,linux下shell脚本的学习
  6. 由35国42家电力输送系统运营商组成的欧洲电力协会网络遭攻击
  7. jmeter 线程执行顺序_JMeter基础之--元件的作用域与执行顺序
  8. Spring Boot整合Druid的使用以及步骤
  9. Anthony Zee《Quantum Field Theory in a Nutshell (2nd)》(徐一鸿《简明量子场论(第二版)》)中文目录
  10. 软件工程,java开发网上购物系统,数据流图DFD图,用例图
  11. 世界第4疯狂的科学家,在103岁生日那天去世了
  12. 神仙打架!传言阿里 P10 赵海平被 P11 多隆判定 3.25 离职,如何评价阿里 P10 赵海平对王垠的面试?...
  13. vs code查找内容(当前文件查找/全局查找)
  14. 洛谷P1067-多项式输出(模拟好题!)
  15. 几经沉浮,人工智能(AI)前路何方?
  16. EasyUI datagrid editor 中用filebox上传图片失败问题
  17. 论文阅读: Inertia Tensor Properties in Robot Dynamics Identification: A Linear Matrix Inequality Approac
  18. 安装Sql Server:以前的某个安装需要重新引导计算机以便使其更改生效。若要继续,请重启计算机,然后再次运行安装程序。
  19. 6.Spring Cloud初相识-------Zool路由
  20. Java回炉之语言基础

热门文章

  1. java xml文件无法打开,java – 无法打开beans.xml(配置文件)因为不存在
  2. MySQL安装时Download界面为空,不显示需要下载的组件,MySQL Installer 8.0.28.0 Download界面为空解决方案
  3. 华为数通设备常用诊断命令
  4. 神经网络技巧篇之寻找最优参数的方法
  5. AMD将于年内推出高端Polaris图形处理器
  6. CentOS下搭建测试WEB平台
  7. 三菱基于雷诺平台推全新跑车 搭1.1T引擎
  8. 物以稀为贵-网管狂妄的原因
  9. Mathpix图片转LaTeX,Word快速插入LaTeX公式教程
  10. 间接寻址级别不同_金属激光切割机的不同配置是什么