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
foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值
foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值