2017-08-02 265 views
0
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”)为什么mybatis需要@Param?

回答

1

要回答这个问题实际:

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

的MyBatis使用通用名称,以供其不能确定名称参数:

[...]他们将文字“参数”,然后由它们在参数列表中的位置来命名例如:#{param1},#{param2}等。如果您想更改参数的名称(仅限多个参数),则可以在参数上使用@Param(“paramName”)注释。

所以,如果你在你的SQL代码中使用这些名称,事情应该可以正常工作。

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