概念

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中已经提供了属性所属的类。

OGNL表达式【mybatis】相关推荐

  1. 为了熟练掌握动态SQL你必须要知道Mybatis中的OGNL表达式

    前言 OGNL是个什么东西?很多刚入门Java的同学会有点陌生.但是在Structs流行的时代OGNL可是必会的数据渲染技术.它全称Object Graph Navigation Language,作 ...

  2. MyBatis 一个动态sql的问题(动态SQL基于OGNL表达式)<if test=“state == ‘0‘“>单个的字符要使用双引号,改为<if test=‘state == “1“‘>或

    MyBatis 一个动态sql的问题(动态SQL基于OGNL表达式) <if test="state == '0'"> 单个的字符要使用双引号,改为<if tes ...

  3. mybatis ognl表达式

    MyBatis常用OGNL表达式 e1 or e2 e1 and e2 e1 == e2,e1 eq e2 e1 != e2,e1 neq e2 e1 lt e2:小于 e1 lte e2:小于等于, ...

  4. 你必须要知道Mybatis中的OGNL表达式

    文章目录 前言 Mybatis中的OGNL 条件断言 四则运算赋值 类的内置方法 取值操作 赋值操作 总结 前言 OGNL是个什么东西?很多刚入门Java的同学会有点陌生.但是在Structs流行的时 ...

  5. 关于OGNL表达式中的%,$,#

    OGNL表达式非常强大-其中#.%.$这三个符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分,要认真区分.   1.#符号的用途一般有三种. 1)访问非根对象属性,例如示例 ...

  6. 深入理解Struts2中的OGNL表达式

    Struts 2中的表达式语言 Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言: JST ...

  7. OGNL表达式语言中的#和$的区别

    Struts2使用标准的Context来进行OGNL表达式语言求值,OGNL的顶级对象是一个Context,这个Context对象就是一个Map类型实例,其根对象就是 ValueStack,如果需要访 ...

  8. Struts(十):OGNL表达式(一)

    Struts2 用s:porperty标签和OGNL表达式来读取值栈中的属性值: I.值栈中的属性值: 1.对象栈:读取对象栈中的某一个对象的属性值: 2.Map栈 :request,session, ...

  9. Struts2漏洞分析之Ognl表达式特性引发的新思路

    摘要 在Ognl表达式中,会将被括号"()"包含的变量内容当做Ognl表达式执行.Ognl表达式的这一特性,引发出一种新的攻击思路.通过将恶意代码存储到变量中,然后在调用Ognl表 ...

  10. struts2教程(9)--OGNL表达式使用

    OGNL表示式使用和值栈 一.介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的 ...

最新文章

  1. 十三、limit 的使用
  2. win10计算机右键属性打不开,win10系统右键计算机无法打开属性窗口的解决技巧...
  3. 一个感染型木马病毒分析(二)
  4. python数据结构基础知识点二分查找
  5. rocksdb原理_教你玩转MyRocks/RocksDB—STATISTICS与后台线程篇
  6. 推荐几个在大厂996,却一心想要按时下班的公众号主和他们的工作(摸鱼)心得...
  7. Classic ASP 系列(3) Application 对象
  8. JDK9.0.4环境变量配置
  9. tkmybatis开启二级缓存
  10. SVN—创建分支、合并分支到主干
  11. 机器人 迷宫算法_机器人,迷宫和附属建筑
  12. 计算机用户禁用更改登记,注册表被禁用的解法.doc
  13. jQuery弹窗组件 colorbox
  14. 设备管理还在不坏不修、不停不管?这5大误区一定要避免
  15. 数据整理—dplyr包(mutate系列)
  16. Nginx常用知识梳理(三)——windows环境下端口耗尽问题
  17. 第二个c程序,日语208音练习
  18. 取消浏览器打开默认为百度搜索引擎
  19. 下载量突破10亿,MinIO的开源启示录
  20. 【前端安全】密码安全

热门文章

  1. python语言程序设计西安电子科技大学答案-中国科学技术大学2019自命题科目覆盖范围及参考书目...
  2. 华为私密相册计算机找回密码,华为手机进入隐私空间的密码忘记了怎么办
  3. 传动系统结构简图_液压传动系统结构示意图画图技巧(攻略)
  4. 【笔记】lamp架构框图
  5. VMware ESXi 6.7注入第三方RAID驱动
  6. vijos一元三次方程求解
  7. 数字图像处理(DIP)作业8 matlab or OpenCV 对lena 图片进行边缘提取
  8. 基于Java的试题库管理系统(论文+毕业设计)(完整源码可演示)
  9. Java后端编程技术微信群和QQ群
  10. Android APP压力测试 之Monkey日志自动分析脚本