一、遇到问题
之前开发了个接口,根据参数type不同,返回不同的数据。
因为需求中已经明确type参数肯定不为空,于是在SQL对应的XML文件中直接写 where,没有加任何判断。
这次开发,又有新的需求,type可以为空,如果为空,则表示返回全部。
想想也不难,在原先的基础上改改就行,于是加入如下代码:
where 1=1
<if test="type!=null and type!=''">
and DQLX=#{type}
</if>
信心满满的测试,结果报错:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'type' in 'class java.lang.String'
仔细检查了好久,也没发现有啥问题,排除法试试——去掉新增加的代码,又正常起来了……
好吧!一时有点无解,想到了mapper层的参数,一般如果只有一个参数,则不需要加Param参数,之前需求都验证过的,所以,应该不会是这块的问题。
可是也没有其他地方了呀,索性加上注解试试,果然加上注解后就不报错了。
问题是解决了,可我还是一脸懵逼,当只有一个参数时,为啥有的时候要加上Param注解,有的时候不需要呢?
本着遇到问题再学习的原则,学习下
二、ibatis中的Param-个人小结
没有找到合适的参考文档,姑且记下自己遇到的问题及感觉吧
1、当SQL中只有一个参数时,一般参数可以不用加Param注解;
2、当有多个时,必须要有Param注解;
3、如果参数用在<if/>等标签中,不管有几个,都要加Pram注解;
建议:
任何情况下都加上Pram注解
@Param("value")的作用:
Param注解的作用是 给参数命名, 参数命名后就 能根据名字得到参数值 ,正确的 将参数传入sql语句 中