保存成功
订阅成功
保存失败,请重试
提交成功

基于对象导航图语言(OGNL)的动态 SQL 生成实现原理

¥4.99会员免费看

在可视化图表应用中,通常的做法是一个图表对应一个数据源表(可以是关系型数据库或者是数据仓库表),然后通过配置指定查询表的维度和度量,动态渲染数据表,然而这种基于配置维度和度量的方式不太适合频繁更改查询条件的交互式查询,另外对于复杂的查询,如一个图表往往对应后端几个数据源表的自定义关联查询,而且筛选条件也可以根据输入条件动态变化,更复杂的情况是由于某些原因,底层数据源表加工不规范,导致多个图表使用同一份数据源时候,需要做较多的再加工处理,针对这些特意需求,如何设计后端功能才能一劳永逸地满足呢?这个时候非动态模板查询难以胜任。

使用过 MyBatis 的同学已经体验过其强大之处,但是在我们的场景,还不能直接使用这么复杂的框架,能否借鉴其思想,将其部分功能迁移过来呢?理论上和实际上其实都是可能的,但是需要解决以下几个问题:

  1. 如何替换动态查询模板中的变量,简单的正则表达式虽然可以,但是毕竟效率不高,也无法进行表达式运算;
  2. 如何计算查询模板中的变量或者表达式?这里的计算不仅包括算术、逻辑运算,还包括对象属性和方法调用等;
  3. 如何优雅设计后端逻辑能够支持查询模板,比如 MyBatis 中将查询模板按照标签规范成 Text 节点,If逻辑节点,动态 Where 节点等;
  4. 如何从模板中解析动态标签,生成上述不同的节点,包括从 XML 配置文件中生成?

通过本文的介绍和实操演示,带领大家了解上述问题的实现方式和原理,相信一定会收益匪浅,同时对熟悉 MyBatis 的工作原理也有重大帮助。

本文适合于任何成长阶段的 IT 从业者。

88 人已订阅
会员免费看
¥4.99 原价订阅
关注提示×
扫码关注公众号,获得 Chat 最新进展通知!
入群与作者交流×
扫码后回复关键字 入群
Chat·作者交流群
入群码
该二维码永久有效
严选标准
知道了
Chat 状态详情
开始预订
预订结果公布20.11.20

预订达标,作者开始写作

审核未达标,本场 Chat 终止

作者文章审核结果公布20.12.15

审核达标,文章发布

审核未达标,本场 Chat 终止

Chat 完结
×
已购列表