在阅读了Mapper XML之后,我不禁想知道如何将一些常见的变换应用于参数.例如...
<select id="selectPerson" parameterType="String" resultType="hashmap">
<!-- #{name} should always be upper case and have a trailing % -->
SELECT * FROM PERSON WHERE FIRST_NAME like #{name}
</select>
Run Code Online (Sandbox Code Playgroud)
upper或concat或'||'或'+'做变换杀死DB2性能我想要的是能够做类似......
<select id="selectPerson" parameterType="String" resultType="hashmap">
<!-- #{name} should always be upper case and have a trailing % -->
SELECT * FROM PERSON WHERE FIRST_NAME like #{name.upperCase() + '%'}
</select>
Run Code Online (Sandbox Code Playgroud)
这样的事情是可能的,还是第二个最好的解决方案?
更新:似乎MyBatis使用OGNL进行一些表达式评估.例如,if和${}表达式中使用OGNL但#{}不会出现,除非有某种方式来欺骗它.
小智 12
MyBatis允许使用上下文中的方法和属性创建值"><bind/>.
Bind在当前语句的范围内创建一个新变量.绑定值的OGNL语句可以使用传入的_parameter对象来计算新的绑定值,然后MyBatis 可以使用该绑定值来构造预准备的语句.
你使用bind的例子:
<select id="selectPerson" parameterType="String" resultType="hashmap">
<!-- #{name} should always be upper case and have a trailing % -->
<bind name="nameStartsWith" value="_parameter.getName().upperCase() + '%'"/>
SELECT * FROM PERSON WHERE FIRST_NAME like #{nameStartsWith}
</select>
Run Code Online (Sandbox Code Playgroud)