gpt4 book ai didi

db2 - 如何在 MyBatis 中将方法应用于参数

转载 作者:行者123 更新时间:2023-12-02 04:33:42 28 4
gpt4 key购买 nike

阅读完 Mapper XMLs 后我不禁想知道如何将一些常见的转换应用于参数。例如...

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

阅读后thisthis我可以做一些观察。

  1. 使用upperconcat'||''+'等SQL函数来执行转换会降低 DB2 的性能
  2. 我总是可以包装映射器或在服务层中公开详细信息,但这看起来很困惑

我想要的是能够做类似的事情

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

这样的事情可能吗?或者第二好的解决方案是什么?

更新:看来 MyBatis 使用 OGNL 进行某些表达式求值。例如,if${} 表达式使用 OGNL,但 #{} 似乎不会,除非有某种方法可以欺骗它。

最佳答案

绑定(bind)

MyBatis 允许使用 <bind/> 从上下文中的方法和属性创建值.

Bind 在当前语句的范围内创建一个新变量。绑定(bind)值的OGNL语句可以使用传入的_parameter对象来计算新的绑定(bind)值,然后 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>
<小时/>

来源

关于db2 - 如何在 MyBatis 中将方法应用于参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9185452/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com