介绍
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象图中的属性。在MyBatis中,OGNL常用于动态SQL构建,如条件判断、循环等。以下是关于OGNL表达式的整合信息,包括基本用法和一些常见的操作符:
基本语法
# 访问属性:
user.name:访问名为user的对象的name属性。
# 调用方法:
user.getName():调用user对象的getName方法。
# 使用索引:
users[0]:访问数组或列表users的第一个元素。
# 逻辑运算符:
与(AND):and # 不是Java中的&&
或(OR):or # 不是Java中的||
非(NOT):! 或 not
# 算术运算符:
加法:+
减法:-
乘法:*
除法:/
取模:%
# 比较运算符:
等于:==
不等于:!=
大于:>
小于:<
大于等于:>=
小于等于:<=
# 特殊字符处理:
在XML配置文件中,由于<和>会被解析为XML标签,因此需要使用相应的实体引用,如<代替<,>代替>。
动态SQL示例
假设有一个查询用户信息的需求,根据传入的参数动态生成SQL语句:
<select id="findUsers" resultType="User">
SELECT * FROM users
WHERE 1=1
<if test="name != null and name != ''">
AND name = #{name}
</if>
<if test="age != null and age > 0">
AND age = #{age}
</if>
<if test="gender == 'M' or gender == 'F'">
AND gender = #{gender}
</if>
</select>