碰到一个觉得很疑惑的问题,Mybatis的parameterType为String类型的时候,能够接收多个参数的吗?

背景

初学Mybatis的时候,看的教程和书籍上都是在说基本的数据类型如:int、String等作为parameterType只能传入单个值,要想传入多个值,可以使用List、Map或者自定义的数据类型等等,但是今日看到了一份别人的代码上,parameterType为String,但是却用来接收了俩个传入值,而且查询的结果并没有出错,很是疑惑。

实验

在网上搜了很久,都没有搜到跟这个相关的问题,关于传入多个参数都是使用的Lst、Map或者Bean来进行的,所以为了验证一下自己写了个小程序,用log4j在控制台打印出SQL语句查看一下结果。

部分主要代码如下:

实体类Notice的属性
private int id;
private String content;
private String createTime;
构造方法、getter/setter
*************************************************************
NoticeMapper.xml一个方法
<!-- 更新公告 -->
<update id="updateNotice" parameterType="String">
update Notice
<set>
<if test="content!=null">
content = #{content},
</if>
<if test="createTime!=null">
createTime = #{createTime}
</if>
</set>
where ID = #{id}
</update>
*************************************************************
BaseDao中update方法
public int update(String sqlId, Object object) {
return getSqlSession().update(sqlId, object);
}
*************************************************************
NoticeServiceImpl中相关方法
private Map<String,Object> params;
params.put("ID", 3);
params.put("content", "1213");
getBaseDao().update("updateNotice", params);

以上代码运行之后,在控制台输出的sql语句为:

08-11 20:13:12.699 [DubboServerHandler-192.168.51.1:8075-thread-5] DEBUG - ==>  Preparing: update Notice SET content = ? where ID = ?
08-11 20:13:12.699 [DubboServerHandler-192.168.51.1:8075-thread-5] DEBUG - ==> Parameters: 1213(String), 3(String)
08-11 20:13:12.701 [DubboServerHandler-192.168.51.1:8075-thread-5] DEBUG - <== Updates: 1

可以看到Mybatis的动态SQL语句执行成功了,返回了Updates: 1,拼装的sql语句:

update Notice SET content = ? where ID = ?
1213(String), 3(String)

实验结果

实验之后更加迷惑了:

  1. 因为parameterType的值为String,但是我传递了一个有俩个值(ID,content)的Map<String,Object>类型竟然传递进去了,而且传递的值都被正确的接收了,语句也执行成功了。
  2. 更值得注意的是控制台输出的ID值: 3(String) ,我传递ID竟然从INT类型自动转换成了String类型,这种机制很令人不解。

备注下

这种问题去请教下大神去,然后去翻翻源码看

每日一记-mybatis碰到的疑惑:String类型可以传入多个参数吗的更多相关文章

  1. 【C++ Primer每日刷】之三 标准库 string 类型

    标准库 string 类型 string 类型支持长度可变的字符串.C++ 标准库将负责管理与存储字符相关的内存,以及提供各种实用的操作.标准库string 类型的目的就是满足对字符串的一般应用. 与 ...

  2. 如果不空null并且不是空字符串才去修改这个值,但这样写只能针对字符串(String)类型,如果是Integer类型的话就会有问题了。 int i = 0; i!=''。 mybatis中会返回tr

    mybatis 参数为Integer型数据并赋值0时,有这样一个问题: mybatis.xml中有if判断条件判断参数不为空时,赋值为0的Integer参数被mybatis判断为空,因此不执行< ...

  3. 自己挖的坑自己填--Mybatis mapper文件if标签中number类型及String类型的坑

    1.现象描述 (1)使用 Mybatis 在进行数据更新时,大部分时候update语句都需要通过动态SQL进行拼接.在其中,if标签中经常会有 xxx !='' 这种判断,若 number 类型的字段 ...

  4. C++中关于string类型究竟能不能用cout输出的问题

    先让我讲下故事哈 一次在MFC中用cout输出一个string类型字符串,编译时出现这样一个错误: error C2679: binary '<<' : no operator defin ...

  5. mybatis入门系列三之类型转换器

    mybatis入门系列三之类型转换器 类型转换器介绍 mybatis作为一个ORM框架,要求java中的对象与数据库中的表记录应该对应 因此java类名-数据库表名,java类属性名-数据库表字段名, ...

  6. String类型的转型

    字符串类型的转型在java中常用的方法有标题中的三种. 简单介绍: 1.toString,需要保证调用这个方法的类.方法.变量不为null,否则会报空指针. 2.String.valueOf.这个方法 ...

  7. MyBatis使用自定义TypeHandler转换类型的实现方法

    From: http://www.manongjc.com/article/15577.html 这篇文章主要介绍了MyBatis使用自定义TypeHandler转换类型的实现方法,本文介绍使用Typ ...

  8. 【C#笔札】1 string类型(2)

    4> Trim whitespace Trim 也是string的一个方法节点 C#例子如下: C#中有Trim,TrimEnd 和TrimStart三种Trim节点,其中后两者无需介绍. 如上 ...

  9. ElasticSearch 5学习(9)——映射和分析(string类型废弃)

    在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...

随机推荐

  1. Sublime text 2/3 中 Package Control 的安装与使用方法

    Package Control 插件是一个方便 Sublime text 管理插件的插件,但因为 Sublime Text 3 更新了 Python 的函数,API不同了,导致基于 Python 开发 ...

  2. Servlet的生命周期及工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  3. 开源物联网通讯框架ServerSuperIO,成功移植到Windows10 IOT,在物联网和集成系统建设中降低成本。附:“物联网”交流大纲

    [开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 一.概述 经过一个多月晚上的时间,终于把开源物联网通讯框架ServerSuperIO成功移植到Windows10 IOT上, ...

  4. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  5. 每天一个设计模式-3 适配器模式(Adapteer)

    每天一个设计模式-3 适配器模式(Adapteer) 1.现实中的情况 旧式电脑的硬盘是串口的,直接与硬盘连接,新硬盘是并口的,显然新硬盘不能直接连在电脑上,于是就有了转接线.好了,今天的学习主题出来 ...

  6. GJM : Unity3D HIAR 目录导航

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  7. JavaScript简单分页,兼容IE6,~3KB

    简介 兼容IE6+及现代浏览器的简单分页,支持同一页面多个分页. 使用 Browser <link rel="stylesheet" href="css/GB-pa ...

  8. android基于口令加密快速搞懂(一)

    import java.util.Random; import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypt ...

  9. Android中使用java.util.Properties犯的错

    今天尝试使用java.util.Properties来保存应用配置,然而遇到了好几个问题,对于熟悉此内容的来说可能都是猪一样的错误,但难免有像我一样的新手再次遇到,希望此文能有所帮助. 错误1 jav ...

  10. ASP.NET Button、ImageButton、LinkButton、HyperLink区别

    这4个控件都属于WEB服务器控件,有很多相同的属性和事件.其区别如下所示. 在*.aspx页面中插入Button控件如以下代码所示.<asp:Button runat="server& ...