maoadd 2017-12-15 16:06 采纳率: 100%
浏览 3927
已采纳

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

图片说明
图片说明

[图片说明
[图片说明

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

  • 写回答

6条回答 默认 最新

  • MockingBird9527 2017-12-16 02:07
    关注

    情况一: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'

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 鸿业暖通修改详细负荷时闪退
  • ¥15 有偿求码,CNN+LSTM实现单通道脑电信号EEG的睡眠分期评估
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体