概念OGNL是Object-Graph Navigation Language的缩写,通过简单一致的表达式语法访问对象的任意属性、调用对象的方法、遍历整个对象的结构图、字段类型使用相同的表达式访问对象的属性。 这样可以更好地获取数据。
用法Ognl表达式的用法与EL表达式的用法类似。 作者在这里把它们作为比较简单地进行说明。
EL表达式:
JSP中使用的表达式; 写法: ${属性名称}; 变量的处理采用字符串拼接方式; 示例: select * fromauthorwhereid=$ { value }
读取基本数据类型的值时,{}只能写value,不能写其他值;Ognl表达式:
是可以访问对象的任何属性的强类型表达式。 写法: #{属性名称};
变量的处理采用预编译方式;
示例: select * from author where id=#{id}
读取基本数据类型的值时,{}为任意变量名;
作者在这里简单地表了它们的区别。 如下。
. EL表达式处理Ognl表达式变量字符串缝合预编译基本数据类型${value}#{任意变量名}对象类型${属性名称}#{属性名称}.${对象属性.属性}#{对象属性
需要注意的是:
- EL表达式:字符串连接,如果接收的内容不做任何修饰就直接连接到SQL,可能会引起SQL注入;
- Ognl表达式:预编译,读取表达式的值,并以预声明方式执行SQL语句
在实际应用中,需要注意用对象取值的方法取数据,写法中省略了get。
例如,获取用户的名称
类中的写法: user.gerUsername (;
OGNL表达式的格式: user.username
在mybaits上为什么能直接写username,#{username}?
因为parameterType已经提供了属性所属的类。