碰到一个觉得很疑惑的问题,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. git push不用重复输入用户名和密码(解决方案)

    每次git push都要输入用户名和密码,有点麻烦,就上网搜了下解决方案. 网上的解决方案有的讲得不清晰,逐个试了后,总结下两种有效的解决方案.   方案一: 1.在计算机安装盘(即一般为C盘)下找到 ...

  2. springmvc<一>一种资源返回多种形式【ContentNegotiatingViewResolver】

    restful服务中一个重要的特性就是一种资源可以有多种表现形式,在springmvc中可以使用ContentNegotiatingViewResolver这个视图解析器来实现这种方式. 描述资源的三 ...

  3. Mysql性能优化二

    接上一篇Mysql性能优化一 建立适当的索引 说起提高数据库性能,索引是最物美价廉的东西了.不用加内存,不用改程序,不用调sql,只要执行个正确的'create index',查询速度就可能提高百倍千 ...

  4. 【JS基础】

    (function(){-})() ( function (){-} () ) 立即执行函数 在函数体后面加括号就能立即调用,其中这个函数必须是函数表达式,不能是函数声明 函数声明:function ...

  5. CSS类似微软中国首页的竖向选项卡

    效果体验:http://hovertree.com/texiao/css/24/ 源码下载:http://hovertree.com/h/bjaf/hardklps.htm 代码如下: <!DO ...

  6. 模块化你的JS代码

    为什么要使用模块模式? 因为在全局作用域中声明的变量和函数都自动成为全局对象Window的属性,这经常会导致命名冲突,还会导致一些非常重要的可维护性难题,全局变量越多,引入错误BUG的概率就越大!所以 ...

  7. 应用Apache Axis进行Web Service开发

    转自(http://tscjsj.blog.51cto.com/412451/84813) 一.概述 SOAP原意为Simple Object Access Protocol(简单对象访问协议),是一 ...

  8. iOS 获取当前点击的坐标

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { NSSet *allTouch ...

  9. JAVA并发编程J.U.C学习总结

    前言 学习了一段时间J.U.C,打算做个小结,个人感觉总结还是非常重要,要不然总感觉知识点零零散散的. 有错误也欢迎指正,大家共同进步: 另外,转载请注明链接,写篇文章不容易啊,http://www. ...

  10. C#初学单例模式

    版本1:最简单的单例模式 public class MySingleton { private MySingleton() //构造函数,注意private { } private static My ...