我使用MyBatis来映射某些查询,我需要比较String
参数(myString
)。MyBatis:使用动态查询比较字符串值
我映射接口是:
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
太糟糕了,你去了“复杂的方法”,你的原始代码与事实并不相同:你所要做的就是从语句中删除'parameterType =“String”',然后参数类型变成隐式地映射,因为你命名带@Param(“myString”)的参数。 – blackwizard