为什么mybatis需要@Param?

时间:2017-08-02 15:53:15

标签: mybatis

User selectUser(@param(“name”)String name,@param(“password”)String password);

<select id=" selectUser" resultMap="BaseResultMap">  
   select  *  from user  where user_name = #{name} and user_password=#{password} 
</select>

像这段代码一样,mybatis可以使用反射来获取变量名,变量有不同的名称,可以替换@param(“XXX”)

1 个答案:

答案 0 :(得分:1)

回答实际问题:

默认情况下,方法的参数名称不是字节码的一部分。所以你提出的建议在默认情况下不起作用。

MyBatis使用参数的通用名称来确定名称:

  

[...]他们将由文字&#34; param&#34;命名。默认情况下,它们在参数列表中的位置,例如:#{param1},#{param2}等。如果您想更改参数的名称(仅限多个),则可以使用@Param(&# 34; paramName&#34;)注释参数。

因此,如果您在SQL代码中使用这些名称,那么应该可以正常工作。

如果为javac指定-parameters编译器标志,它确实会包含方法参数的名称以及您建议的原则上使用的方法。我看过一个声称MyBatis会使用它们的教程,虽然参考文档似乎没有提到它。你可以尝试一下。