博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【MyBatis学习06】_parameter:解决There is no getter for property named in class java.lang.String...
阅读量:6292 次
发布时间:2019-06-22

本文共 1666 字,大约阅读时间需要 5 分钟。

我们知道在mybatis的映射中传参数,只能传入一个。通过#{参数名} 即可获取传入的值。

Mapper接口文件:

public int delete(int id) throws Exception;

MapperL配置文件:

delete from user where id=#{id}

接口中我们定义了delete(int id),形参的名称为id。顺理成章的在sql段里就用#{id}去获取。

其实这里的”参数名”可以是任意的。
因为JAVA反射只能获取方法参数的类型,但无从得知方法参数的名字的
上面这个例子把#{id}换成#{di},一样运行。当然为了便于阅读代码,还是用#{id}
_parameter则是java对通过反射获取参数后,给参数取的别名。所以用#{_parameter}也行。

但有几种情况你必须得用_parameter

第一种情况:拼接字符${}。咱这里先不去考虑SQL注入这些问题。

public List
findByName(String searchkey) throws Exception;

因为要使用模糊查询。要在入参前后加上%,所以不能用占位符#{},而要用拼接字符串

{searchkey}

一切都似乎没有问题,运行,报错:
Exception in thread “main”
org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause:
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘searchkey’ in ‘class java.lang.String’ ### Cause:
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘searchkey’ in ‘class java.lang.String’

问题就出在拼接字符串${searchkey}。和占位符#{}不同的是,java不会自动将${searchkey}对应成_parameter。因此只能自己写

OK,一切又正常了。

可是你没有觉得这种写法太不赏必悦目了?

mybatis考虑到这点,你只需在接口的方法参数前加上param注解就好了。

public List<User> findByName(@Param(value="searchkey") String searchkey) throws Exception;

第二种情况:动态SQL中的条件判断语句中

public List
findByName(String searchkey) throws Exception;

 

在if和bind元素中涉及到参数searchkey。直接使用searchkey也会报上面一样的错误

解决办法就是用_parameter替换searchkey

或者在接口的方法参数前加上param注解。

public List
findByName(@Param(value="searchkey") String searchkey) throws Exception;

转载地址:http://spcta.baihongyu.com/

你可能感兴趣的文章
Oracle取月份,不带前面的0
查看>>
Linux Network Device Name issue
查看>>
IP地址的划分实例解答
查看>>
如何查看Linux命令源码
查看>>
运维基础命令
查看>>
入门到进阶React
查看>>
SVN 命令笔记
查看>>
检验手机号码
查看>>
重叠(Overlapped)IO模型
查看>>
Git使用教程
查看>>
使用shell脚本自动监控后台进程,并能自动重启
查看>>
Flex&Bison手册
查看>>
solrCloud+tomcat+zookeeper集群配置
查看>>
/etc/fstab,/etc/mtab,和 /proc/mounts
查看>>
Apache kafka 简介
查看>>
socket通信Demo
查看>>
技术人员的焦虑
查看>>
js 判断整数
查看>>
mongodb $exists
查看>>
js实现页面跳转的几种方式
查看>>