mybatis在xml中使用OGNL取值简述

概述

在业务中如果dao层搭配了mybatis,那么通常会将一些业务查询写入到xml中,并且在过滤一些业务条件时会使用OGNL表达式

比如下面这段OGNL表达式

java 复制代码
<if test="null != params.applyTimeStart">
    and mpa.apply_time >= #{params.applyTimeStart}
</if>

<if test="null != params.applyTimeEnd">
    and mpa.apply_time &lt;= #{params.applyTimeEnd}
</if>

可以看到在表达式中是通过xxx.xxx的方式取值的;

先说结论,通过get方法获取的值

org.apache.ibatis.reflection.Reflector#getGetInvoker

mybatis:3.5.10

源码分析

思路大致是先从外层查询进去,然后一路debug进去;

我的查询入口是个分页查询,我在中间源码setParameters处打了个断点

com.baomidou.mybatisplus.core.MybatisParameterHandler#setParameters

然后一路往下跟踪到BeanWrapper中的metaClass.getGetInvoker方法,在其中看到了查询get方法的逻辑

org.apache.ibatis.reflection.wrapper.BeanWrapper#getBeanProperty

获取get方法的逻辑

org.apache.ibatis.reflection.Reflector#getGetInvoker

相关推荐
前网易架构师-高司机4 天前
带标注的驾驶员安全带识别数据集,识别率99.5%,可识别有无系安全带,支持yolo,coco json,pascal voc xml格式
xml·yolo·数据集·交通·安全带
莫寒清4 天前
Mybatis的插件原理
面试·mybatis
逍遥德4 天前
Maven教程.01- settings.xml 文件<profile>使用详解
xml·java·maven
莫寒清4 天前
MyBatis 中动态 SQL 的作用
面试·mybatis
吹晚风吧4 天前
实现一个mybatis插件,方便在开发中清楚的看出sql的执行及执行耗时
java·sql·mybatis
码云数智-大飞4 天前
像写 SQL 一样搜索:dbVisitor 如何用 MyBatis 范式颠覆 ElasticSearch 开发
sql·elasticsearch·mybatis
逍遥德4 天前
Maven教程.03-如何阅读pom.xml文件
xml·java·后端·maven
Mr__Miss5 天前
mybatisPlus分页组件3.5.15版本报错解决方案
mybatis
无名-CODING5 天前
MyBatis中#{}和${}完全指南:从原理到实战
mybatis
松叶似针5 天前
Flutter三方库适配OpenHarmony【doc_text】— .docx 解析全流程:从 ZIP 解压到 XML 提取
xml·flutter·harmonyos