mybatis中字符串和参数的串联

时间:2015-09-18 07:04:45

标签: java mysql mybatis

好的,所以我搜索了这个,而+$将无效。我不想在mybatis select查询中将%#search param连接起来。我想在mybatis XML config not service(Java)...

中实现这一点

我有这个查询

<select id="carriersDataTable" parameterType="map" resultType = "carrier">
        SELECT 
        carrierId
        name, 
        prefix,
        country, 
        status,
        isdirect as direct
        FROM carriers
        WHERE name LIKE '%' + #{search} + '%' AND Status != -1 AND IF(''=#{status}, 1, Status = #{status})
        ORDER BY name
        LIMIT #{startIndex}, #{fetchSize}
    </select>

我已经尝试LIKE '%' + #{search} + '%'LIKE ${%#{search}%}两者都不会有效,任何帮助都会受到赞赏......

5 个答案:

答案 0 :(得分:2)

试试这个'%' || #{search} || '%' 它会解决你的问题。

答案 1 :(得分:1)

如果你想在sql中保留%,你必须使用$ symbol

'%' + '${search}' + '%'

请记住,使用$ {}将您的查询公开给sql注入,这样您就必须在java代码中正确地转义搜索字符串

答案 2 :(得分:0)

有两个属性-personId和personNickName

  

personId javaType是java.math.BigInteger,值例如。 123

     

personNickName javaType是String,值是例如。 'MACK'

因此,在mybatis中,我需要在查询'123MACK'的where子句中进行串联

Select * From 
From PersonTable 
Where personUniqueValue = cast(#{personId} as varchar) + #{personNickName}

希望它将对某人有所帮助。

答案 3 :(得分:0)

尝试在数据库中使用内置的字符串连接功能,例如

LIKE CONCAT('%', #{search}, '%')

对于MySQL

答案 4 :(得分:0)

<select id="selectBlogsLike" resultType="Blog">
  <bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
  SELECT * FROM BLOG
  WHERE title LIKE #{pattern}
</select>

文档:https://mybatis.org/mybatis-3/dynamic-sql.html