
如果我们搜索与OGNL相关的内容,通常的结果都与Struts相关. 您一定不会找到与MyBatis相关的. 尽管它与Struts中的用法相似,但很难以另一种方式理解它.
MyBatis常用的OGNL表达式
以上只是适用于MyBatis的OGNL表达式. 有关完整的表达,请单击此处.
我可以在MyBatis的哪里使用OGNL?
如果您对MyBatis参数进行了深入研究,您可能会印象深刻,因为本文提到了OGNL和一些特殊用法.
如果您还没有读过它,建议您花些时间阅读. 上面的博客不是很容易理解,但是理解后会很有用.
在MyBatis中可以在两个地方使用OGNL:
在MyBatis中处理上述两个地方时,它们都是由OGNL处理的.

以下使用示例说明这两种情况的用法.
1. 在动态SQL表达式中
示例1,类似于MySQL的查询:
<select id="xxx" ...>
select id,name,... from country
<where>
<if test="name != null and name != ''">
name like concat('%', #{name}, '%')
</if>
</where>
</select>
以上代码中的test值将使用OGNL来计算结果.
示例2: 类似于查询的常规
<select id="xxx" ...>
select id,name,... from country
<bind name="nameLike" value="'%' + name + '%'"/>
<where>
<if test="name != null and name != ''">
name like #{nameLike}
</if>
</where>
</select>
此处

注意: 可以通过#{}或$ {}获得对 在通用映射器中支持UUID主键. Universal Mapper中的实现是使用
<bind name="username_bind"
value='@java.util.UUID@randomUUID().toString().replace("-", "")' />
尽管此方法可以自动调用静态方法,但是它无法写回相应的属性值,因此在使用它时需要小心.
2. 在$ {param}
的参数中
在上面的示例中,使用以下方法最简单
<select id="xxx" ...>
select id,name,... from country
<where>
<if test="name != null and name != ''">
name like '${'%' + name + '%'}'
</if>
</where>
</select>

请注意,此处写入的是$ {'%'+名称+'%'},而不是%$ {name}%. 两种方法的结果相同,但是过程不同.
在MyBatis中处理$ {}时,只需使用OGNL计算结果值ognl 调用方法,然后在SQL中替换相应的$ {xxx}. OGNL仅处理$ {expression here}.
此处的表达式可以是OGNL支持的所有表达式. 编写起来可能非常复杂. 您可以调用静态方法以返回值,也可以调用静态属性值.
示例: 使用OGNL实现单表拆分功能
以上是使用OGNL的简单方法. 这是OGNL实现表划分的示例.
子表函数是常规Mapper中的新函数,它允许您在运行时指定表名,并通过指定的表名对表进行操作. 此功能是使用OGNL实现的.
首先,并非所有表都需要此功能,所以定义了一个接口. 当参数(接口方法仅具有实体类的一个参数)对象继承接口时,将允许使用动态表名.
public interface IDynamicTableName {
/**
* 获取动态表名 - 只要有返回值,不是null和'',就会用返回值作为表名
*
* @return
*/
String getDynamicTableName();
}

然后在以XML编写表名称时使用它:
<if test="@tk.mybatis.mapper.util.OGNL@isDynamicParameter(_parameter) and dynamicTableName != null and dynamicTableName != ''"> ${dynamicTableName} </if> <if test="@tk.mybatis.mapper.util.OGNL@isNotDynamicParameter(_parameter) or dynamicTableName == null or dynamicTableName == ''"> defaultTableName </if>
由于我需要确定_parameter是否继承IDynamicTableName接口,因此不再能够实现简单的编写,因此使用了静态方法. 两种方法如下:
/**
* 判断参数是否支持动态表名
*
* @param parameter
* @return true支持,false不支持
*/
public static boolean isDynamicParameter(Object parameter) {
if (parameter != null && parameter instanceof IDynamicTableName) {
return true;
}
return false;
}
/**
* 判断参数是否b支持动态表名
*
* @param parameter
* @return true不支持,false支持
*/
public static boolean isNotDynamicParameter(Object parameter) {
return !isDynamicParameter(parameter);
}
根据
还要注意,XML判断中有一个dynamicTableName. 该参数根据getDynamicTableName方法获得. MyBatis使用与属性对应的getter方法获取值,而不是字段.
最后
如果您真的想了解MyBatis中OGNL的用法ognl 调用方法,请再写一些示例进行测试和播放. 动手测试是学习的好方法.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-250282-1.html
一方面要做好法律战的准备
提升民性