将参数传递给MyBatis @Select

时间:2017-02-18 21:23:38

标签: java parameter-passing mybatis

我正在写我的拳头MyBatis应用程序,我在@Select附近。我不知道我的@Select定义有什么问题,一切似乎都很好,但我得到Parameter not found例外。

当我将参数传递给我的@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]

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

请参阅https://github.com/mybatis/mybatis-3/issues/549

感谢。