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中已经提供了属性所属的类。
OGNL表达式【mybatis】相关推荐
- 为了熟练掌握动态SQL你必须要知道Mybatis中的OGNL表达式
前言 OGNL是个什么东西?很多刚入门Java的同学会有点陌生.但是在Structs流行的时代OGNL可是必会的数据渲染技术.它全称Object Graph Navigation Language,作 ...
- MyBatis 一个动态sql的问题(动态SQL基于OGNL表达式)<if test=“state == ‘0‘“>单个的字符要使用双引号,改为<if test=‘state == “1“‘>或
MyBatis 一个动态sql的问题(动态SQL基于OGNL表达式) <if test="state == '0'"> 单个的字符要使用双引号,改为<if tes ...
- 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:小于等于, ...
- 你必须要知道Mybatis中的OGNL表达式
文章目录 前言 Mybatis中的OGNL 条件断言 四则运算赋值 类的内置方法 取值操作 赋值操作 总结 前言 OGNL是个什么东西?很多刚入门Java的同学会有点陌生.但是在Structs流行的时 ...
- 关于OGNL表达式中的%,$,#
OGNL表达式非常强大-其中#.%.$这三个符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分,要认真区分. 1.#符号的用途一般有三种. 1)访问非根对象属性,例如示例 ...
- 深入理解Struts2中的OGNL表达式
Struts 2中的表达式语言 Struts 2支持以下几种表达式语言: OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言: JST ...
- OGNL表达式语言中的#和$的区别
Struts2使用标准的Context来进行OGNL表达式语言求值,OGNL的顶级对象是一个Context,这个Context对象就是一个Map类型实例,其根对象就是 ValueStack,如果需要访 ...
- Struts(十):OGNL表达式(一)
Struts2 用s:porperty标签和OGNL表达式来读取值栈中的属性值: I.值栈中的属性值: 1.对象栈:读取对象栈中的某一个对象的属性值: 2.Map栈 :request,session, ...
- Struts2漏洞分析之Ognl表达式特性引发的新思路
摘要 在Ognl表达式中,会将被括号"()"包含的变量内容当做Ognl表达式执行.Ognl表达式的这一特性,引发出一种新的攻击思路.通过将恶意代码存储到变量中,然后在调用Ognl表 ...
- struts2教程(9)--OGNL表达式使用
OGNL表示式使用和值栈 一.介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的 ...
最新文章
- 十三、limit 的使用
- win10计算机右键属性打不开,win10系统右键计算机无法打开属性窗口的解决技巧...
- 一个感染型木马病毒分析(二)
- python数据结构基础知识点二分查找
- rocksdb原理_教你玩转MyRocks/RocksDB—STATISTICS与后台线程篇
- 推荐几个在大厂996,却一心想要按时下班的公众号主和他们的工作(摸鱼)心得...
- Classic ASP 系列(3) Application 对象
- JDK9.0.4环境变量配置
- tkmybatis开启二级缓存
- SVN—创建分支、合并分支到主干
- 机器人 迷宫算法_机器人,迷宫和附属建筑
- 计算机用户禁用更改登记,注册表被禁用的解法.doc
- jQuery弹窗组件 colorbox
- 设备管理还在不坏不修、不停不管?这5大误区一定要避免
- 数据整理—dplyr包(mutate系列)
- Nginx常用知识梳理(三)——windows环境下端口耗尽问题
- 第二个c程序,日语208音练习
- 取消浏览器打开默认为百度搜索引擎
- 下载量突破10亿,MinIO的开源启示录
- 【前端安全】密码安全
热门文章
- python语言程序设计西安电子科技大学答案-中国科学技术大学2019自命题科目覆盖范围及参考书目...
- 华为私密相册计算机找回密码,华为手机进入隐私空间的密码忘记了怎么办
- 传动系统结构简图_液压传动系统结构示意图画图技巧(攻略)
- 【笔记】lamp架构框图
- VMware ESXi 6.7注入第三方RAID驱动
- vijos一元三次方程求解
- 数字图像处理(DIP)作业8 matlab or OpenCV 对lena 图片进行边缘提取
- 基于Java的试题库管理系统(论文+毕业设计)(完整源码可演示)
- Java后端编程技术微信群和QQ群
- Android APP压力测试 之Monkey日志自动分析脚本