1. 前言 MyBatis 的动态 SQL 广泛应用到了OGNL 表达式,OGNL 表达式可以灵活的组装 SQL 语句,从而完成更多的功能。OGNL 易学易用,与 J**a 代码几乎一致,本小节我们将系统的介绍 OGNL 表达式在 MyBatis 中的使用。 2. 定义 解释:OGNL 全称 Object-Graph N**igation Langua...
MyBatis 的动态 SQL 广泛应用到了OGNL 表达式,OGNL 表达式可以灵活的组装 SQL 语句,从而完成更多的功能。OGNL 易学易用,与 J**a 代码几乎一致,本小节我们将系统的介绍 OGNL 表达式在 MyBatis 中的使用。
解释:OGNL 全称 Object-Graph N**igation Language,是 J**a 中的一个开源的表达式语言,用于访问对象数据。
OGNL 最常用于 if 标签中,用于判断条件是否满足,如下:
<if test="age != null">
AND age = #{age}
</if>
if 标签的 test 属性就是个典型的 OGNL 表达式。age != null
表示当 age 不为 null 的时候 if 成立,则动态的向 SQL 中插入标签内的 SQL 代码段。
在 MyBatis 中常见的 OGNL 表达式如下:
其中 1~4 以及 9~10 都是特别常用的几种情况,而其它的情况不利于 SQL 的维护,因此并不常见。
TIPS: 提示, 如果你熟悉 Python 的话,会发现 OGNL 表达式完全就是在写 Python。
下面我们就来以实例来看一看 OGNL 表达式。
有一个名为 pedro 的 User 对象,如下:
User pedro = new User();
pedro.setUsername("pedro");
pedro.setTags(Arrays.asList("admin", "man"));
pedro.setAge(23);
访问用户的 username 属性,OGNL 表达式为pedro.username
,结果为:
# pedro.username
pedro
访问用户的第一个标签,OGNL 表达式为pedro.tags[0]
,结果为:
# pedro.tags[0]
admin
比较用户标签长度是否大于 1,OGNL 表达式为pedro.tags[0]
,结果为:
# pedro.tags.size > 1
true
用户年龄加上一个整数 22,OGNL 表达式为pedro.age + 22
,结果为:
# pedro.age + 22
45
将用户年龄全部大写,OGNL 表达式为pedro.username.toUpperCase
,结果为:
# pedro.username.toUpperCase
PEDRO