OGNL表达式【mybatis】

概念

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。这样可以更好的取得数据。

用法

Ognl表达式的用法与EL表达式的用法类似,作者这里就以它们作为对比进行简述:

EL表达式:

  • 是JSP中所使用的表达式;写法:${属性名};
  • 对变量的处理,采用的是字符串拼接的方式;
  • 如:select * from author where id=${value}

在这里插入图片描述

  • 读取基本数据类型的值时,{}中只能写 value,不能填写其他值;

Ognl表达式:

  • 是一种功能功能强大的表达式,可以存取对象的任意属性;写法:#{属性名};

  • 对变量的处理,采用的是预编译的方式;

  • 如:select * from author where id=#{id}
    在这里插入图片描述

  • 读取基本数据类型的值时,{}中可以使任意变量名;

  • 作者这里将它们的区别简要做了一张表格,如下:

.EL表达式Ognl表达式
变量的处理字符串拼接预编译
基本数据类型${value}#{任意变量名}
对象类型(pojo类型)${属性名}#{属性名}
.${对象属性.属性}#{对象属性.属性}

这里再通过一个案例来看看他们的区别:

在这里插入图片描述

在这里插入图片描述

需要注意的是:
    - EL表达式:字符串拼接,接收到的内容不加任何修饰直接拼接在SQL中,可能引起SQL注入;
    - Ognl表达式:预编译,读取表达式的值,通过preparedStatement的方式进行SQL语句的执行

实际应用中需要注意

  • 通过对象的取值方法来获取数据,在写法上把get给省略了。
    比如:我们获取用户的名称
    类中的写法:user.gerUsername();
    OGNL表达式写法:user.username
    mybaits中为什么能直接写username,#{username},
    因为在parameterType中已经提供了属性所属的类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值