Java 将参数传递给MyBatis@Select

Java 将参数传递给MyBatis@Select,java,parameter-passing,mybatis,Java,Parameter Passing,Mybatis,我正在写我的第一个MyBatis应用程序,我一直在@Select。我不知道我的@Select定义有什么问题,一切似乎都很好,但我得到了一个参数notfound异常 当我将参数传递给@Insert语句时,我遵循了相同的模式,它可以正常工作 我使用MyBatis 3.4.2 这是我的@Select: @Select("SELECT * " + "FROM configuration " + "WHERE key_name = #{key} AND "

我正在写我的第一个MyBatis应用程序,我一直在@Select。我不知道我的@Select定义有什么问题,一切似乎都很好,但我得到了一个
参数notfound
异常

当我将参数传递给@Insert语句时,我遵循了相同的模式,它可以正常工作

我使用MyBatis 3.4.2

这是我的@Select:

@Select("SELECT * "
        + "FROM configuration "
        + "WHERE key_name = #{key} AND "
        +       "(#{userId} IS NULL AND user_id IS NULL) OR user_id = #{userId} AND "
        +       "status = 1")
Configuration findByKeyAndUserId(String key, Long userId);
org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.apache.ibatis.binding.BindingException: Parameter 'key' not found. Available parameters are [arg1, arg0, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'key' not found. Available parameters are [arg1, arg0, param1, param2]
我得到的例外情况:

@Select("SELECT * "
        + "FROM configuration "
        + "WHERE key_name = #{key} AND "
        +       "(#{userId} IS NULL AND user_id IS NULL) OR user_id = #{userId} AND "
        +       "status = 1")
Configuration findByKeyAndUserId(String key, Long userId);
org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: org.apache.ibatis.binding.BindingException: Parameter 'key' not found. Available parameters are [arg1, arg0, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'key' not found. Available parameters are [arg1, arg0, param1, param2]

传递单个参数对象时,将直接通过映射的getter或key set访问属性。如果要在方法中传递多个参数,必须使用注释命名参数:

Configuration findByKeyAndUserId(@Param("key") String key, @Param("userId") Long userId);

这种基于注释的语法实际上表现为键值映射。密钥由@Param提供。您为参数变量选择的名称不可见。

请尝试自JDK 8以来提供的
-parameters
编译选项。您可以省略
@Param
注释


谢谢。

您知道如何配置maven和intellij以使用“-参数”吗?我在maven编译器插件中添加了-parameters,但没有任何影响。Intellij:构建、执行、部署>编译器>Java编译器>其他命令行参数,但它不起作用。也许我需要在这上面花更多的时间:(Maven:See.IntelliJ:You's right!!但是你应该重建你的项目。(执行“Build>rebuild project”).Maven:org.apache.Maven.plugins Maven编译器插件-参数工作正常。Eclipse:Java>compiler>“存储有关方法参数的信息。”(可通过反射使用)已选中