我对“ $”和“#”有一个奇怪的问题,为什么单个“ $”不起作用?
mybatis-spring-boot-starter
版本是2.0.1。
@Select("select * from user where user_id=#{userId}")
User findUserId(int userId);
没关系
@Select("select * from user where user_id=${userId}")
User findUserId(String userId);
有一个错误:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userId' in 'class java.lang.String'
我使用mybatis
配置useActualParamName=true
,因此如果使用@Param
@Param
。
@Select("select * from user where user_id=${userId}")
User findUserId(@Param("userId") String userId);
或同时使用“#”和“ $”
@Select("select * from user where user_id=${userId} and status=#{status}")
User findUserId(String userId, int status);
没关系。
为什么会这样?如果不使用@Param
,单个'$'将不起作用并引发异常?
答案 0 :(得分:1)
在mybatis中,#{variable}被替换为'variable value',而$ {variable}被替换为变量value(不带引号)。
在这种情况下,如果userId的值为String,则会出现异常。