在mybatis中使用$ vs#

时间:2019-07-15 08:38:50

标签: java mybatis

我对“ $”和“#”有一个奇怪的问题,为什么单个“ $”不起作用?

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,单个'$'将不起作用并引发异常?

1 个答案:

答案 0 :(得分:1)

  

在mybatis中,#{variable}被替换为'variable value',而$ {variable}被替换为变量value(不带引号)。

在这种情况下,如果userId的值为String,则会出现异常。