我正在使用 MyBatis 映射一些需要比较 String 的查询参数(myString)。

我的映射器界面是:

public Map<Integer, String> findSomething(@Param("myString") String myString);

我的XML如下:

<select id="findSomething" parameterType="String" resultType="Map"> 
    SELECT column1 as key, 
           column2 as value 
    FROM my_table 
    <where> 
         <choose> 
            <when test="myString == 'xxx'"> 
                column3 = 1 
            </when> 
            <when test="myString == 'yyy'"> 
                myColumn  = 2 
            </when> 
            <when test="myString == 'zzz'"> 
                myColumn  = 3 
            </when> 
        </choose> 
    </where> 
    ORDER BY value; 
</select> 

当我执行这条语句时,抛出以下错误:

ERROR [stderr] Caused by: org.apache.ibatis.exceptions.PersistenceException:  
ERROR [stderr] ### Error querying database.  Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'myString' in 'class java.lang.String' 

A String这样比较,味道不好。不幸的是,这是数据库建模的方式。

MyBatis 版本:3.2.2

请您参考如下方法:

使用 MyBatis 3.2.8 测试

<select id="findSomething" parameterType="String" resultType="Map"> 
    SELECT column1 as key, 
           column2 as value 
    FROM my_table 
    <where> 
         <choose> 
            <when test='"xxx".equals(myString)'> 
                column3 = 1 
            </when> 
            <when test='"yyy".equals(myString)'> 
                myColumn  = 2 
            </when> 
            <when test='"zzz".equals(myString)'> 
                myColumn  = 3 
            </when> 
        </choose> 
    </where> 
    ORDER BY value; 
</select> 

请注意 test 周围的单引号和 de 常量值周围的双引号。如您所见,诀窍是使用 equals。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!