mybatis传值到XML里面,为什么参数类型是HashMap可以获取到参数值,Map就不行?

图片说明
图片说明

[图片说明
[图片说明

第一二张图是别人写的代码,三四张是我写的代码,一开始我也像他那样在XML文件里面传入的参数配置为java.util.Map,虽然能正常运行,但是却不能传入参数,打印出来的SQL,传入的参数显示为“?”当我把传入的参数类型改为java.util.HashMap又能看到传入的参数为正常,请问为什么,我们代码基本都是一样的啊。

0

6个回答

情况一:parameterType="HashMap"
图片说明
图片说明
结果:sql正常执行,参数传递与接收正常。

情况二:parameterType="Map"
图片说明
图片说明
结果:sql正常执行,参数传递与接收正常

完整sql如图:
图片说明

初步推断你对mybatis的两个符号不知道区别:“#”、“$”
--使用“#”拼接参数的话,打印的sql执行log,就会出现“?”,并且能看到sql的log的下方有形如这样的参数【==> Parameters: 1(String), 0(Integer), 10(Integer)】
例如:假设startTime的值为‘2017-12-16', select * from user where create_time > #{startTime}
执行结果是:
==> Preparing : select * from user where create_time > ?
==> Parameters: 2017-12-16(String)

--使用“$”拼接参数的话,打印的sql是连带参数一起打印出来。
例如:假设startTime的值为‘2017-12-16', select * from user where create_time > #{startTime}
==> Preparing : select * from user where create_time > '2017-12-16'

1
maoadd
maoadd 虽然不是这个问题,但是那么详细的解答还是谢谢,之前那个问题可能是编辑器哪里出了问题,关了编辑器重启就好了
一年多之前 回复
weixin_36146275
weixin_316529 纠正:--使用“$”拼接参数的话,打印的sql是连带参数一起打印出来。 例如:假设startTime的值为‘2017-12-16', select * from user where create_time > ${startTime}
一年多之前 回复

因为Map是一个接口,想要接受结果必须使用这个接口的实现类。Map那么多实现类,如果你不知道具体用哪个实现类而只告诉mybatis用map的任何实现类都可以,那mybatis接收不到结果或者结果错了,是你负责还是mybatis负责?

2
qq_36520153
书生_AABB 666
一年多之前 回复

你试试这样写:

 <select id="select" parameterType="java.util.Map" resultMap="RM">
        SELECT ... 
        FROM ....
        WHERE id=#{parameterMap.openid}
    </select>
0


SELECT ...
FROM ....
WHERE id=#{parameterMap.openid}
你试试看看

0

SELECT ...
FROM ....
WHERE id=#{parameterMap.openid}

0

Map只是一个接口,hashmap是实现类

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
mybatis传入map参数之后xml文件中取值问题
有时在开发中难免会遇到传入的参数为map类型的时候, map的key为数据库中的主键或者其他的唯一字段, value为需要进行插入的值,在mybaits的XML文件中进行遍历取出map参数中的值, 有两种方式进行处理 方法一: xml文件中写法 update id="updateInventoryBatch" parameterType="java.util.Map"> for
mybatis #{} 和${}的区别 #{} 和${}中获取参数值
#{}中的中的内容会被当成字符串,会替换sql中的参数,不会拼接成sql运行 ,没有sql注入风险 。 在mappper.xml中 传递基本类型数据时可以 #{0},#{1}.....或者#{param1},#{param2}....或者#{id},#{name}这样获取参数值 ${}中的内容会被直接拼接到sql中运行,${}中有sql话会运行其中的Sql, 有sql注入的风险。 在...
mybatis -- HashMap 用法/实例:查找文章分类下文章的数目
有两张表,一张是文章分类表category,两个字段(id 分类编号,title 分类名称);                   一张是文章表article,三个字段(id 文章编号,name 文章标题 ,content 文章内容,categoryid 所属文章分类) 需求: 利用sql查找出一个分类下文章的数目。 分析:常规 xml中  写 sql SELECT tab1.id
Mybatis传入多个参数 Map List作为参数
在使用mybatis过程中可能存在传入多个参数的可能性 其中可能有单纯的
myBatis中传入的参数是map,map里面存了字符串也存了对象,* mapper.xml文件中的sql该怎么写
(1)map中字符串的使用         &amp;lt;if test=&quot;startInvokeStartTime != null&quot;&amp;gt; and invoke_start_time &amp;gt;= #{startInvokeStartTime,jdbcType=TIMESTAMP} &amp;lt;/if&amp;gt; &amp;lt;if test=&quot;endInvokeStartTime != null&quot;&amp;gt;   ...
mybatis中foreach详解(传参Map类型)
项目遇到:需要根据一个字段的集合遍历查询数据,需要在mybatis使用传入个Map参数进行foreach遍历查询。 xml代码如下: select from cell_info #{item} 其中,collection的值是coverage,是传入的参数Map的key。 mapper代码如下: List selectByMr(
Mybatis插入数据返回主键,parameterType是HashMap,而非实体类做法
笔者当时想插入数据返回主键,但是parameterType使用的是HashMap,而非实体类笔者使用的是Oracle不过这种方式Mysql也可以参考一下,因为Mysql也是可以提前通过它自己的方言SQL语句拿到即将插入的数据的自增id尝试了一下使用HashMap获取id,获取成功,代码如下 &amp;lt;insert id=&quot;insertInfo&quot; parameterType=&quot;java.util...
mybatis使用Map传多个参数的使用
List selectUserPaging(@Param("hashMapQuery") Map hashmap); parameterType="map">         select                 from DYRKB_USER         where ACCOUNT_STATE != 8                     a
Mybatis的SQL参数获取不到问题
INSERT INTO ** (pid,name,create_user,create_time) VALUES (#{pid},#{name},#{createUser},#{createTime}) 有时会遇到 values(?,?,?,?)的问题 参数没有成功传进去 其原理并没有详细去了解 但是解决方法是有的 在Mapper接口类(不是*Mapper...
mybatis 中parametertype的传入参数问题
一直都没有搞懂 这个问题,现在把它写下来      1: parametertype传入参数分为两种 ,第一种为java基本数据类型(一次传入一个基本类型的值,用#{参数值})。第二种为复杂数据类型(java实体类和Map)        java实体类和map可以传入多个值,之前我就不明白,怎么传入多个值,在#{}里面写什么内容。java实体类根据属性名字来判断传入的是哪个值 
Mybatis的mapper.xml的传值和<if></if>标签的使用(学习分享)
SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 配置给定命名空间的缓存。 cache-ref – 从其他命名空间引用缓存配置。 resultMap – 最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载你的对象。 parameterMap – 已经被废弃了!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除。这里不会记录。 sql
MyBatis的传入参数parameterType类型
1. MyBatis的传入参数parameterType类型分两种    1. 1. 基本数据类型:int,string,long,Date;    1. 2. 复杂数据类型:类和Map 2. 如何获取参数中的值:    2.1  基本数据类型:#{参数} 获取参数中的值    2.2  复杂数据类型:#{属性名}  ,map中则是#{key} 3.案例:    3
mybatis和数据库字段不匹配,使用hashmap传递数据
1、mybatis和数据库字段不匹配 如果我们数据库的字段名字和实体类的属性名字不一直,就徐璈通过resultmap来进行配置,保证数据能正确回到我们的实体类的那个中: &amp;lt;!-- type:实体类路径 id 唯一标记 --&amp;gt; &amp;lt;resultMap type=&quot;com.xingxue.entity.TypeBean&quot; id=&quot;typeMap&quot;...
mybatis中接口参数使用map类型的好处
在springmvc+mybatis中dao接口中使用map作为参数传递的优点: 1.不用指定每个参数的名称. 2.可以传递任意数量和任意类型的参数,而不用对每个参数进行命名和申明,非常利于扩展,在需要时不用额外动Java代码在xml中可以更灵活的获取参数,不用受前端参数变化的影响
mybatis返回HashMap结果类型与映射
  Xhtml代码  &amp;lt;!-- 返回HashMap结果 类型--&amp;gt;       &amp;lt;!-- 如果想返回JavaBean,只需将resultType设置为JavaBean的别名或全限定名 --&amp;gt;       &amp;lt;!-- TypeAliasRegistry类初始化时注册了一些常用的别名,如果忘记了别名可以在这里面查看 --&amp;gt;       ...
mybatis参数String与Integer类型的判断
mybatis写update时,正常是set了值才会进行update操作,我们一般是这样写: if test="sampleBatchNo != null and sampleBatchNo != ''" > SAMPLE_BATCH_NO = #{sampleBatchNo,jdbcType=VARCHAR}, if> 1、 String类型是符合的,但是如果是Intege
输入映射(传递POJO包装对象和传递HashMap对象)
输入映射 传递pojo包装对象 需求: 用户综合条件查询功能。 使用mybatis实现用户查询列表,有很多查询条件(比如:商品信息、订单信息)。 如何将综合查询条件传到mybatis的statement中,要使用包装对象传这些参数。 - 定义一个包装对象 简单理解为:pojo包装了pojo - mapp
MyBatis更新数据(输入参数类型为Map)
public boolean updateFpkjByCondition(Map params) { MapString , Object> map = new HashMap(); map.put("params" , params); return getMybatisDao().execute(FpkjConstant.UPDATEFPKJBYCONDITION, m
Map双列集合的用法,遍历方法
Map集合的常用方法。 Map集合是一个双列集合,里面的每个元素都是一个键值对。 Map&amp;lt;K,V&amp;gt; 有两个泛型, K 表示Map集合中键的类型。 V 表示Map集合中值的数据类型。 常用方法: (重要)V put​(K key, V value): 向Map集合中添加键值对。 (重要)V get​(Object key): 根据key获取到value的值。 ...
Mybatis传入参数类型为Map
参考:https://www.cnblogs.com/seeusmile-cnblog/p/6221340.htmlhttps://www.cnblogs.com/huzi007/p/5969711.html方式一:mybatis更新sql语句:&amp;lt;update id=&quot;publishT00_notice&quot; parameterType=&quot;Map&quot;&amp;gt; update test set c...
mybatis 返回HashMap是对字段值为null时不保存key
对于mybatis 返回HashMap是对字段值为null时不保存key的情况,只需要设置mybatis的全局变量就可以了 默认是false
关于mybatis 传入基本参数类型使用if test 判断出错的问题
在使用mybatis传入基本参数类型时,比如parameterType="java.lang.Long",使用if test 判断会报错,所以需要使用_parameter 当做入参 正确代码:         select         *         from        reason op         where         1=1            
关于在XML文件中不能取到Map的值
可以用#{}或者${} 取值!花了几个小时才研究明白的!
mybatis里面参入参数类型错误问题
虽然是一个小问题但还是记录一下, <select id="getUserList" parameterType="Map" resultMap="BaseResultMap" resultType="String"> select * from userinfo where 1=1 <if test="_parameter != null" > and re
mybatis传入参数为map时如何在mapper.xml中获取
有时在开发中难免会遇到传入的参数为map类型的时候, map的key为数据库中的主键或者其他的唯一字段, value为需要进行插入的值,在mybaits的XML文件中进行遍历取出map参数中的值, 有两种方式进行处理方法一:xml文件中写法&amp;lt;update id=&quot;updateInventoryBatch&quot; parameterType=&quot;java.util.Map&quot;&amp;gt; &amp;lt;...
HashMap数据类型
在刷题中,发现hashmap不熟悉,想使用key为char,value为int,发现不能用,原因如下。 HashMap不能使用基本数据类型。 没有理解引用类型和原始类型。 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型  
mybaties使用#{}取不到数据
最近使用mybaties做项目,在编写一个update语句时,老是更新不到数据。经过一步步分解,发现where条件中的#{columnName} 直接赋值替换时能更新到数据,发现问题在此。后来使用'${columnName}' 解决了该问题。MARK一下。          最后百度发现原来是oracle数据库char字段问题,因为查询条件传入字段长度与数据库定义长度不匹配,故更新不到。也可以使
Mybatis中通过HaseMap封装参数作为查询条件
HaseMap封装参数 Map paramMap = new HashMap(); List aprrovalStatus = new ArrayList(); aprrovalStatus.add(AprrovalStatus.COMMITED.getKey()); aprrovalStatus.add(AprrovalStatus.SYNCHRONIZED.getKey());
在mybatis中传入参数的几种方式 @Param
@Param注解在mybatis中的使用以及传入参数的几种方式(转) 第一种: Dao层的方法 "font-size:12px;">Public User selectUser(String name,String password);   对应的Mapper.xm    select id="selectUser" resultMap="BaseResult
ibatis返回HashMap类型结果时自动把Integer类型数据转变成BigDecimal类型
这几天用ibatis框架时发下当返回HashMap类型时,会把Integer类型的数据转变成BigDecimal类型           select * from product where id=#id#   表product字段id为Integer类型,返回的map中id类型变成BigDecimal类型
mybatis xml文件中传入参数和if结合使用时要注意的地方
mybatis中如果用了if那么传进来的参数不能直接单独传入,要封装到map或bo中传入,要么去了if     mybatis xml文件中传入参数和if结合使用时要注意的地方:     这里直接传入int但是又用了if所以出错 Caused by: org.apache.ibatis.reflection.ReflectionException: There is no gette
MyBatis使用Map批量插入数据的一个例子
直接上代码把,利用面向对象的思想,应该不难理解。 /** * 批量记录错误语言检查错误信息 * * @param languageToolResultBean */ public void batchLgToolResultTOErrorBatch(List<LanguageToolResultBean> languageToolResultB
ibatis获取对象map属性的对应key的value值
使用ibatis需要在参数中获取到对象map属性值对应key的value值,可以如下进行获取,记下来防止忘记了
MyBatis几种不同类型传参的总结
在Web开发过程中,我们根据业务需求将不同类型参数从后台传入到MyBatis的各个不同的mapper命名空间中,包括有string类型,map类型,list集合类型,或者是直接传入一个对象等。 1.String类型    1.1对于string类型,我们一般传 在sql中写明parameterType=&quot;string&quot; ,例: 则在获取参数时,如果是要进行非null的判断,则不可在if后直接...
MyBatis返回值为Map
在使用Spring+MyBatis时,从数据库读取多个字段,多条记录,设置ResultType=Map Mapper中代码如下: select szlx, lasj from ${tablename} where lasj>=#{beg} and substr(lasj,1,10)#{end} order by lasj inter接口: public
mybatis当输入参数有多个时的解决方案,Map类型,索引引用输入参数,map输出
Map类型在映射文件中的使用 当输入参数有多个时的解决方案 通过输入参数的索引引用输入参数 需求:通过姓名和地址查询用户信息 输入参数:        姓名        地址 开发: [1]编写接口 [2]映射文件的编写 [3]测试 控制台输出:                            通过map传递输入参数 [1]编写接口 ...
关于Mybatis中mapper.xml的传入参数简单技巧
由于在做项目的时候,我看见同事使用的传入参数类型各式各样,感觉没规律可言,闲暇的时候我就自己搭建了项目做了一些传入参数的测试(当然其实更好的方式是看源码,但是博主能力有限,毕竟入行没多久,看起来很吃力,只能靠测试来找规律,下面是我发现的小技巧,我测试的是3.4.x版本的,猜想应该现在用的版本规律都差不多); 首先声明,常用的不管传入参数是什么,sqlStatement中的parameterTyp
mybatis查询,返回类型为HashMap,字段为null时没返回
在mybatis配置文件加入下面代码<settings> <setting name="callSettersOnNulls" value="true"/> </settings>表示字段为null时依旧返回字段,值为null
mybatis参数传参、取值处理等
单个参数:mybatis不会做特殊处理 取值方式:#{参数名} 这里参数名不必与方法的形参名称一致,可以用任意参数名来接受实参 例子:方法:update(Integer id)   sql映射文件取值#{a},这样也可以取到值 多个参数:mybatis会做特殊处理,即把多个参数封装成一个map ,key:param1....paramN,value:传入的参数值,#{}就是就是从map...
mybatis 返回类型为HashMap 字段为空
myBatis HashMap字段为空时处理方式!
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 为什么学python 达内培训web就