每日一记-mybatis碰到的疑惑:String类型可以传入多个参数吗
碰到一个觉得很疑惑的问题,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)
实验结果
实验之后更加迷惑了:
- 因为parameterType的值为String,但是我传递了一个有俩个值(ID,content)的
Map<String,Object>类型竟然传递进去了,而且传递的值都被正确的接收了,语句也执行成功了。 - 更值得注意的是控制台输出的ID值: 3(String) ,我传递ID竟然从INT类型自动转换成了String类型,这种机制很令人不解。
备注下
这种问题去请教下大神去,然后去翻翻源码看
每日一记-mybatis碰到的疑惑:String类型可以传入多个参数吗的更多相关文章
- 【C++ Primer每日刷】之三 标准库 string 类型
标准库 string 类型 string 类型支持长度可变的字符串.C++ 标准库将负责管理与存储字符相关的内存,以及提供各种实用的操作.标准库string 类型的目的就是满足对字符串的一般应用. 与 ...
- 如果不空null并且不是空字符串才去修改这个值,但这样写只能针对字符串(String)类型,如果是Integer类型的话就会有问题了。 int i = 0; i!=''。 mybatis中会返回tr
mybatis 参数为Integer型数据并赋值0时,有这样一个问题: mybatis.xml中有if判断条件判断参数不为空时,赋值为0的Integer参数被mybatis判断为空,因此不执行< ...
- 自己挖的坑自己填--Mybatis mapper文件if标签中number类型及String类型的坑
1.现象描述 (1)使用 Mybatis 在进行数据更新时,大部分时候update语句都需要通过动态SQL进行拼接.在其中,if标签中经常会有 xxx !='' 这种判断,若 number 类型的字段 ...
- C++中关于string类型究竟能不能用cout输出的问题
先让我讲下故事哈 一次在MFC中用cout输出一个string类型字符串,编译时出现这样一个错误: error C2679: binary '<<' : no operator defin ...
- mybatis入门系列三之类型转换器
mybatis入门系列三之类型转换器 类型转换器介绍 mybatis作为一个ORM框架,要求java中的对象与数据库中的表记录应该对应 因此java类名-数据库表名,java类属性名-数据库表字段名, ...
- String类型的转型
字符串类型的转型在java中常用的方法有标题中的三种. 简单介绍: 1.toString,需要保证调用这个方法的类.方法.变量不为null,否则会报空指针. 2.String.valueOf.这个方法 ...
- MyBatis使用自定义TypeHandler转换类型的实现方法
From: http://www.manongjc.com/article/15577.html 这篇文章主要介绍了MyBatis使用自定义TypeHandler转换类型的实现方法,本文介绍使用Typ ...
- 【C#笔札】1 string类型(2)
4> Trim whitespace Trim 也是string的一个方法节点 C#例子如下: C#中有Trim,TrimEnd 和TrimStart三种Trim节点,其中后两者无需介绍. 如上 ...
- ElasticSearch 5学习(9)——映射和分析(string类型废弃)
在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...
随机推荐
- springmvc配置文件web.xml详解各方总结(转载)
Spring分为多个文件进行分别的配置,其中在servlet-name中如果没有指定init-param属性,那么系统自动寻找的spring配置文件为[servlet-name]-servlet.xm ...
- ArrayList LinkedList源码解析
在java中,集合这一数据结构应用广泛,应用最多的莫过于List接口下面的ArrayList和LinkedList; 我们先说List, public interface List<E> ...
- 关于XHR对象中status范围的记录
if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){ // 成功执行区域 // 2XX表示有效响应 ...
- Spring in Action 学习笔记二-DI
装配bean 2015年10月9日 9:49 Sprng中,对象无需自己负责查找或创建其关联的其他对象.相关,容器负责吧需要相互协作的对象引用赋予各个对象. 创建应用对象之间协 ...
- Android中使用AsyncTask实现文件下载以及进度更新提示
Android提供了一个工具类:AsyncTask,它使创建需要与用户界面交互的长时间运行的任务变得更简单.相对Handler来说AsyncTask更轻量级一些,适用于简单的异步处理,不需要借助线程和 ...
- 9套Android实战经典项目资料分享给大家
通过项目学习收获更大. 1.基于Android平台实战爱短信项目 下载地址:http://pan.baidu.com/s/1hr8CEry 2.Android平台实战CRM客户关系管理(AChartE ...
- 【代码笔记】iOS-实现网络图片的异步加载和缓存
代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. se ...
- jTemplates部分语法介绍
1.{#if} {#if |COND|}..{#elseif |COND|}..{#else}..{#/if} Examples: {#if 2*8==16} good {#else} fail {# ...
- 【Bootstrap-插件使用】Jcrop+fileinput组合实现头像上传功能
作者:Dreawer链接:https://zhuanlan.zhihu.com/p/24465742来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:梦游的龙猫(转 ...
- 看看C# 6.0中那些语法糖都干了些什么(上篇)
今天没事,就下了个vs2015 preview,前段时间园子里面也在热炒这些新的语法糖,这里我们就来看看到底都会生成些什么样的IL? 一:自动初始化属性 确实这个比之前的版本简化了一下,不过你肯定很好 ...