当前位置: 首页 > 知识库问答 >
问题:

MYBATIS:使用动态查询比较字符串值

闻人冷勋
2023-03-14

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

<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'

以这种方式进行的string比较气味难闻。不幸的是,这是数据库建模的方式。

MyBatis版本:3.2.2

共有1个答案

常永怡
2023-03-14

用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常量值周围的双引号。诀窍是用你能看到的等式。

 类似资料:
  • 问题内容: 我的Firestore集合的文档带有字符串字段,该字段可以为 null 。 我期望如果我查询: 我将获取“ producedDate”早于“ 2018-10-15”的所有产品,包括那些“ producedDate”为空的产品。 但是实际上我没有得到s。 这是故意的还是一个错误? 问题答案: 它打算以这种方式工作。该文档指出: 当查询涉及具有 混合类型值的 字段时,Cloud Fires

  • 问题内容: 我听说散列(即将字符串或对象转换为数字)用于字符串等,因为比较数字比字符串更容易。如果为真,这是什么原因? 问题答案: 不一定是这种情况,但大多数时候可能是这样。 请考虑以下情况: 我想比较字符串“ apples”和“ oranges”。如果我只想确定“ apples” ==“ oranges”,我只需要比较每个字符串的第一个字符:’a’!=’o’=>“ apples”!=“ oran

  • 主要内容:equals() 方法,equalsIgnoreCase() 方法,equals()与==的比较,compareTo() 方法字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等。 在 Java 中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面详细介绍这 3 个方法的使用。 equals() 方法 equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相

  • 在字符串比较中使用通配符 内含的模式匹配为字符串比较提供了一个多用途工具。下表显示了你可以通过 Like 运算符 使用的通配符和它们匹配的数字或字符串的数目。 在样式中的字符 在表达式中的匹配 ? _(下划线) 任何单一字符 * or % 零个或多个字符 # 任何单一数字(0 — 9) [charlist] 任何在字符表中的单一字符 [!charlist] 任何不在字符表中的单一字符 可用括在括号

  • 问题内容: 我想知道Python如何进行字符串比较,更具体地说,当使用小于()或大于()运算符时,它如何确定结果。 例如,如果我放进去。我知道它会比较字符串中的相应字符,但是由于缺乏更好的术语,不清楚为什么还有更多,“权重”是基于以下事实:在第一个字符串中a小于b(第一个位置)而不是在第二个字符串(第二个位置)中a小于b的事实。 问题答案: 比较使用字典顺序:首先比较前两个项目,如果它们不同,则确

  • 问题内容: 似乎PHP的运算符区分大小写。那么有使用理由吗? 执行以下操作是否安全? 问题答案: 使用它的原因是因为 如果str1小于str2,则返回<0;如果str1大于str2,则> 0;如果相等,则> 0。 仅返回或,它不会告诉您哪个是“更大”的字符串。