资讯专栏INFORMATION COLUMN

MyBatis支持的OGNL语法

wh469012917 / 980人阅读

摘要:支持的语法用于解析静态方法解析表达式在映射语句中可以支持引入以下几种方式示例变量属性静态方法无参数待参数静态属性数组索引集合构造方法的静态方法可以省略的编写,方法的默认是包下的静态方法可以省略的编写,类默认的是语法中通过两个字符,前者

Mybatis支持OGNL的语法 OgnlCache

用于解析静态方法
org.apache.ibatis.scripting.xmltags.TextSqlNode.BindingTokenParser#handleToken
org.apache.ibatis.scripting.xmltags.OgnlCache#getValue
org.apache.ibatis.scripting.xmltags.OgnlCache#parseExpression解析表达式
org.apache.ibatis.ognl.Ognl#parseExpression
org.apache.ibatis.ognl.OgnlParser#staticReference
org.apache.ibatis.ognl.OgnlParser#staticMethodCall
org.apache.ibatis.ognl.OgnlRuntime#callStaticMethod

在sql映射语句中可以支持引入以下几种方式

示例SQL

变量
id =${id}

属性
id = ${user.id}

静态方法(public)- 无参数
id="${@cn.followtry.mybatis.bean.User@name()}"

待参数
id="${@org.apache.commons.lang3.math.NumberUtils@isNumber("abcd")}"

静态属性(public)
id=${@cn.followtry.mybatis.bean.User@aaa}

数组索引
id="${@cn.followtry.mybatis.bean.User@arr[1]}"

集合
"${@cn.followtry.mybatis.bean.User@list[1]}"

Map
id="${@cn.followtry.mybatis.bean.User@map.get("123")}"
id="${@cn.followtry.mybatis.bean.User@map}"

Enum

id=${@cn.followtry.mybatis.bean.CodeTypeEnum@THREE.ordinal()}

构造方法
id="${new cn.followtry.mybatis.bean.User()}"

java.lang.Math的静态方法
id = ${@@abs(-12345678)} 可以省略class的编写,方法的默认class是java.lang.Math

java.lang包下的静态方法
id = ${@Integer@parseInt("654")} 可以省略package的编写,类默认的package是java.lang

${}语法中通过两个@字符,前者定位到Java类,后者定位到类中的方法或属性
这里只列出的其中一部分,对于Mybatis支持的${}语法,可以参见OGNL语法手册。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67973.html

相关文章

  • 一次mybatisognl引发bug排查

    摘要:现象项目组一妹子程序员求助,说有,有一个值明明设置的是,但是存到数据库里面却会自动变成,尝试了各种调整也找不原因,都快急疯了我以前确实没有研究过源码,本着专研问题的精神,决定通过对一探究竟。 现象   项目组一妹子程序员求助,说mybatis有bug,有一个值明明设置的是A.prop1=XXX,但是存到数据库里面却会自动变成A.prop1=true,尝试了各种调整也找不原因,都快急疯了...

    RichardXG 评论0 收藏0
  • Mybatis源码分析(1) - Mybatis包目录简介

    摘要:核心包包名称包内内容简介注解目录。如等类的实例反射生成工具目录主要是注解,和的构造器及转换器内部缓存接口。等默认的游标处理类数据源工厂类及实现。数据源实现类自定义的三个异常类。。都继承自执行器相关包。为后续分析源码打下基础。 Mybatis核心包 showImg(https://segmentfault.com/img/remote/1460000018747383?w=746&h=1...

    chengtao1633 评论0 收藏0
  • Mybatis系列】从源码角度理解Mybatis$和#作用

    摘要:原因就是传入的和原有的单引号,正好组成了,而后面恒等于,所以等于对这个库执行了查所有的操作。类比的执行流程和原有的我们使用的方法就是。可以理解为就是用来解析定制的符号的语句。后续的流程,就和正常的流程一致了。 前言 在JDBC中,主要使用的是两种语句,一种是支持参数化和预编译的PrepareStatement,能够支持原生的Sql,也支持设置占位符的方式,参数化输入的参数,防止Sql注...

    yanwei 评论0 收藏0
  • Mybatis常见面试题

    摘要:执行没有,批处理不支持,将所有都添加到批处理中,等待统一执行,它缓存了多个对象,每个对象都是完毕后,等待逐一执行批处理。 Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是预编译处理,${}是字符串替换。 使用#{}可以有效的防止...

    liuchengxu 评论0 收藏0

发表评论

0条评论

wh469012917

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<