MyBatis:使用动态查询比较String值
我正在使用MyBatis映射一些我需要比较String
参数( myString
)的查询。
我的Mapper 界面是:
public Map findSomething(@Param("myString") String myString);
我的XML如下:
SELECT column1 as key, column2 as value FROM my_table column3 = 1 myColumn = 2 myColumn = 3 ORDER BY value;
当我执行此语句时,抛出以下错误:
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'
用这种方式进行String
比较,闻起来很糟糕。 不幸的是,这是数据库建模的方式。
MyBatis版本: 3.2.2
用MyBatis 3.2.8测试
注意测试周围的单引号和de常量值周围的双引号。 诀窍是使用equals,你可以看到。
当然,我必须经历一个复杂的方法。
更改了映射器方法签名:
public Map findSomething(@Param("myPojo") MyPojo myPojo);
XML必须是:
只是不要忘记,作为一个POJO,参数类必须有它的各自的getter和setter。
假设Mybatis 3.2.2及更高版本,请将您的xml修改为以下内容,看看它是否有帮助:
应该提到另一个解决方案:
column3 = 1; myColumn = 2; myColumn = 3;