碰到一个觉得很疑惑的问题,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. 【转】ZigBee终端入网方式深入分析

    前述 继之前对终端Direct Join的分析,发现很多东西还很模糊,存在很多问题.终于找到时间继续深入挖下去,这次应该比较完整地搞清了终端的入网机制,并纠正之前的几个认识偏差. 由于Z-Stack网 ...

  2. MySQL的简单使用和JDBC示例

    MySql是关系型数据库管理系统(RDBMS),所谓的"关系型"可以把它当作是"表格"概念,事实上,一个关系型数据库由一个或数个表格组成. MySQL所使用的S ...

  3. /etc/sysconfig/下找不到iptables文件解决方法

    时间:2014-12-19 01:17来源:csdn 作者:大智 举报 点击:5639次 本想做些防火墙策略.防火墙策略都是写在/etc/sysconfig/iptables文件里面的.可我发现我也没 ...

  4. ASP.NET中后台数据和前台控件的绑定

    关于ASP.NET中后台数据库和前台的数据控件的绑定问题 最近一直在学习个知识点,自己创建了SQL Server数据库表,想在ASP.NET中连接数据库,并把数据库中的数据显示在前台,注意,这里的数据 ...

  5. hexo博客-性能优化

    前言 刚开始搭建博客的时候觉得很好玩,可是玩的久了,问题慢慢就出来了,就跟谈恋爱一样==.比如现在我访问博客的时候就感觉慢的要死,不可否认,使用hexo搭建服务器方便快捷,但是由于github作为服务 ...

  6. Atitit 《控制论原理与概论attilax总结

    Atitit <控制论原理与概论attilax总结 <控制论> 奠基之作,出自创始人维纳.虽然内容权威,但我认为带有相当强烈的个人色彩,且门槛较高,不适合入门.深入研究控制论必看书籍 ...

  7. Android中隐藏顶部状态栏的那些坑——Android开发之路3

    Android中隐藏顶部状态栏的那些坑 先看看常规的隐藏状态栏的方法: 方法一: @Override protected void onCreate(Bundle savedInstanceState ...

  8. iOS开发--弹窗多选、单选框架

    最近刚毕业...因为个毕设,都离职了又得重新找工作了,这是之前自己没事开直播写的一个小框架,后来各种趋于稳定后,简单的封装了下,写了个小demo,这里就不废话了,直接贴地址,也不编辑了,自己复制过去看 ...

  9. swift-元组

    元组: 将多个相同或者不同类型的值用一个小括号括起来就是一个元组.元组和结构体很像,实际上元组是复合类型.小括号内可以写任意类型,如果不定义类型,可以根据数据自动判断推算出类型 省略了类型 let p ...

  10. oracle容器化docker解决方案

    Docker提供了轻量级的虚拟化,它几乎没有任何额外开销. 提供了一个从开发到上线均一致的环境. 开发效率:一是我们想让开发环境尽量贴近生产环境 二是我们想快速搭建开发环境   基于docker研发小 ...