SSM框架 mapper.xml中 value的空值判断问题

正怒月神 2017-06-07 11:43:08
由于最近项目转型,使用 java开发
使用ssm框架时,遇到一个问题。(java中,我也只能自认菜鸡了

问题:

先看一下数据库。


然后看看 mapper.xml
<select id="myTest" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
*
from scm_producttype pt
<if test='value!="" and value!=null'>
where TypeNameCN='test'
</if>
order by pt.ProductTypeID
</select>


很明显,我在myTest方法中增加了一个if标签。这里只是例子,判断了value不为""和null

最后我在测试中,调试信息为:


很奇怪,
当传值null,那么可以查询出2条数据。(说明mapper.xml中if过滤了)
当传值"",却只能查询1条数据。(说明mapper.xml中if没有过滤)

相关资料:
这个问题我百思不得骑姐。
想问问各位,这是什么情况?
我之前看了一篇帖子。
大意是:java中的字符串和char判断不等导致,
结果修改成
<if test="value!='' and value!=null">
也是不行
连接:http://blog.csdn.net/z69183787/article/details/51589171

目前解决方案:
目前的解决方案,也只能在controller接收值时,判断如果为"",则赋值null。
但这是解决方案,我还是不清楚这个问题的本质。

希望有了解的人解惑







...全文
632 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwn_2016 2017-06-07
  • 打赏
  • 举报
回复
引用 10 楼 hanjun0612 的回复:
[quote=引用 9 楼 xwn_2016 的回复:] 能行不
用_parameter可以。刚刚结贴。。。。对不起啊,大兄弟。不然分你一点了[/quote] 有经验一起分享,分值不重要
NANU-NANA 2017-06-07
  • 打赏
  • 举报
回复
引用 6 楼 hanjun0612 的回复:
[quote=引用 4 楼 u010087908 的回复:] 你这个是不是说反了?
哦,我明白你意思了,你是说我(说明mapper.xml中if过滤了)这个说反了? 我意思是,null的话,if就不进了,被过滤了。 ""的话,if就进了,if没有被过滤。[/quote] 嗯
正怒月神 2017-06-07
  • 打赏
  • 举报
回复
引用 9 楼 xwn_2016 的回复:
能行不
用_parameter可以。刚刚结贴。。。。对不起啊,大兄弟。不然分你一点了
xwn_2016 2017-06-07
  • 打赏
  • 举报
回复
<select id="myTest" resultMap="BaseResultMap" parameterType="java.lang.String" >
    select
    *
    from scm_producttype pt
    <if test='value!="" and value!=null'>
      where TypeNameCN='test'
    </if>
    order by pt.ProductTypeID
  </select>
改成
<select id="myTest" resultMap="BaseResultMap" parameterType="java.lang.String" >
    select
    *
    from scm_producttype pt
    <if test='_parameter!="" and _parameter!=null'>
      where TypeNameCN='test'
    </if>
    order by pt.ProductTypeID
  </select>
能行不
正怒月神 2017-06-07
  • 打赏
  • 举报
回复
引用 7 楼 pany1209 的回复:
参考一下这篇文章。。https://my.oschina.net/flags/blog/381199
的确如此。厉害了,结贴
李德胜1995 2017-06-07
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
[quote=引用 2 楼 pany1209 的回复:] parameterType传入一个JavaBean。。。。如果value为空字符串“”,就javaBean.setValue("");

<if test="value!=null and value!=''">
这个解决方案,也是考虑过,传入javabean是没有问题的。 不过我不清楚这个问题的本质。 为何value=""会进if判断。[/quote] 如果传入参数类型为String,把value改为_parameter就能识别、、、、 参考一下这篇文章。。https://my.oschina.net/flags/blog/381199
正怒月神 2017-06-07
  • 打赏
  • 举报
回复
引用 4 楼 u010087908 的回复:
你这个是不是说反了?
哦,我明白你意思了,你是说我(说明mapper.xml中if过滤了)这个说反了? 我意思是,null的话,if就不进了,被过滤了。 ""的话,if就进了,if没有被过滤。
正怒月神 2017-06-07
  • 打赏
  • 举报
回复
引用 4 楼 u010087908 的回复:
你这个是不是说反了?
没反,数据库2条数据,如果传null,那么if条件不进,查询出2条。 传"" 进了if条件,只查询出1条数据。 但是我就是纳闷 <if test='value!="" and value!=null'> 为何value=""会进if判断
NANU-NANA 2017-06-07
  • 打赏
  • 举报
回复
当传值null,那么可以查询出2条数据。(说明mapper.xml中if过滤了) 当传值"",却只能查询1条数据。(说明mapper.xml中if没有过滤) 你这个是不是说反了?
正怒月神 2017-06-07
  • 打赏
  • 举报
回复
引用 2 楼 pany1209 的回复:
parameterType传入一个JavaBean。。。。如果value为空字符串“”,就javaBean.setValue("");

<if test="value!=null and value!=''">
这个解决方案,也是考虑过,传入javabean是没有问题的。 不过我不清楚这个问题的本质。 为何value=""会进if判断。
李德胜1995 2017-06-07
  • 打赏
  • 举报
回复
parameterType传入一个JavaBean。。。。如果value为空字符串“”,就javaBean.setValue("");

<if test="value!=null and value!=''">
正怒月神 2017-06-07
  • 打赏
  • 举报
回复
吃了一顿饭回来。还没人啊。。。 没人遇到过这种问题?

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧