java中mybatis动态传值,Map中的key与sql语句大小写差一个,但是并不报错,只是不出数据,这是为啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中mybatis动态传值,Map中的key与sql语句大小写差一个,但是并不报错,只是不出数据,这是为啥?相关的知识,希望对你有一定的参考价值。

之前不记得是什么类型传值,名字不一样测试的时候会报错,但是Map就不会,为什么?

翻了一下mybatis源码,
1、当你的传的参数类型是map的时候,sql入参的时候根据你写的key去找value,如果找不到mybatis并不会报异常,而是直接返回一个null作为value
2、如果传入的是bean参数,此时mybatis通过反射取值,此时如果没有那个参数,mybatis会抛出异常告诉你在当前对象里面没有你提供的参数
参考技术A mybatis对于大小写的要求不是很严格,所以不是大小写的问题,你在entity中定义的map是否在mybatis中和数据库的字段对应,你可以检查一下

MyBatis动态SQL使用,传入参数Map中的Key判断

<select id="" parameterType="Map"   resultMap="commodityResultMap" >
        SELECT c.id c_id,c.variety_id,c.nickName c_nickName,c.description c_description,c.ordinaryPrice c_ordinaryPrice,c.memberPrice c_memberPrice,c.path c_path,v.id v_id,v.nickName v_nickName 
        FROM commodity c 
        INNER JOIN variety v 
        ON c.variety_id=v.id 
        where 1=1  
        
             <!-- _parameter.containsKey(‘键‘) 作用:判断键是否存在返回值boolean  #{键}取对应的值   !必须三处键值对应,否则取不到值-->
             <if test="_parameter.containsKey(‘varietyID‘)"> 
                and v.id=#{varietyID}
             </if>
    </select>

  • 此做法的好处,可做多条件查询。

 

以上是关于java中mybatis动态传值,Map中的key与sql语句大小写差一个,但是并不报错,只是不出数据,这是为啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用mybatis返回一个Map时,如果sql语句查询没有记录,如何让sql中的字段为Map中的key

Mybatis 传值到SQL

foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值

foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值

foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值

mybatis获取map中的key和value