开源项目地址: https://github.com/chenrenfei/sagacity-sqltoy
感受sqltoy之美: https://chenrenfei.github.io/sqltoy/#/
更新内容:
1、缓存翻译对应的缓存更新机制增加增量更新
2、查询结果计算增加环比计算,请参见sqltoy-showcase下的QueryCaseTest类
sqltoy的代表性特性展示:
1、最优雅的sql编写模式
select *
from sqltoy_device_order_info t
<where>
<if test="orderId!=null">
and t.ORDER_ID=#{orderId}
</if>
<if test="authedOrganIds!=null">
and t.ORGAN_ID in
<foreach collection="authedOrganIds" item="order_id" separator="," open="(" close=")">
#{order_id}
</foreach>
</if>
<if test="staffIds!=null">
and t.STAFF_ID in
<foreach collection="staffIds" item="staff_id" separator="," open="(" close=")">
#{staff_id}
</foreach>
</if>
<if test="beginDate!=null">
and t.TRANS_DATE>=#{beginDate}
</if>
<if test="endDate!=null">
and t.TRANS_DATE<#{endDate}
</if>
</where>
select *
from sqltoy_device_order_info t
where #[t.ORDER_ID=:orderId]
#[and t.ORGAN_ID in (:authedOrganIds)]
#[and t.STAFF_ID in (:staffIds)]
#[and t.TRANS_DATE>=:beginDate]
#[and t.TRANS_DATE<:endDate]
2、最具特色的缓存翻译和缓存条件检索,让复杂查询最接近单表查询
订单号
客户ID
商品ID
下单日期
商品数量
商品价格
订单金额
订单状态
业务员ID
部门
S0001
C10001
101
2020-03-10
10
3000
30000
02
1001
N002
关联客户表做like关联商品表查询品名
关联员工信息表显示员工名字
关联机构表显示机构名称
关联数据字典翻译状态
你是这么做的吗?看一下sqltoy怎么做吧!是不是变成了单表查询,效率毫无疑问秒杀多表关联无数倍!
<sql id="order_showcase">
<!-- 通过缓存对最终结果代码进行翻译,显示名称 -->
<translate cache="organIdName" columns="ORGAN_NAME" />
<translate cache="staffIdName" columns="STAFF_NAME" />
<translate cache="goodsIdName" columns="GOODS_NAME" />
<translate cache="customIdName" columns="CUSTOM_NAME" />
<translate cache="dictKeyName" cache-type="ORDER_STATUS" columns="STATUS_NAME" />
<filters>
<!-- 将查询参数customName通过缓存进行类似like检索获取匹配的customId数组作为查询条件 -->
<cache-arg cache-name="customIdName" param="customName" alias-name="customIds" />
</filters>
<value>
<![CDATA[
select
ORDER_ID ,
TOTAL_QUANTITY,
TOTAL_AMT,
ORGAN_ID ,
ORGAN_ID ORGAN_NAME,-- 缓存翻译
STAFF_ID ,
STAFF_ID STAFF_NAME,
SIGN_TIME,
CUSTOM_ID,
CUSTOM_ID CUSTOM_NAME,
GOODS_ID ,
GOODS_ID GOODS_NAME,
STATUS,
STATUS STATUS_NAME
from od_order_info t1
where #[SIGN_TIME>=:beginTime]
#[and SIGN_TIME <=:endTime]
-- 这里就是缓存条件检索
#[and CUSTOM_ID in (:customIds)]
]]>
</value>
</sql>
3、最高层级的分页查询优化:@fast 实现先分页后关联,page-optimize 将分页2次查询变成1.4次查询。
<!-- 快速分页和分页优化演示 -->
<sql id="sqltoy_fastPage">
<!-- 分页优化器,通过缓存实现查询条件一致的情况下在一定时间周期内缓存总记录数量,从而无需每次查询总记录数量 -->
<!-- alive-max:最大存放多少个不同查询条件的总记录量; alive-seconds:查询条件记录量存活时长(比如120秒,超过阀值则重新查询) -->
<page-optimize alive-max="100" alive-seconds="120" />
<value>
<!\[CDATA\[
select t1.*,t2.ORGAN_NAME
-- @fast() 实现先分页取10条(具体数量由pageSize确定),然后再关联
from @fast(select t.*
from sqltoy_staff_info t
where t.STATUS=1
#[and t.STAFF_NAME like :staffName]
order by t.ENTRY_DATE desc
) t1
left join sqltoy_organ_info t2 on t1.organ_id=t2.ORGAN_ID
]]>
</value>
<!-- 这里为极特殊情况下提供了自定义count-sql来实现极致性能优化 -->
<!-- <count-sql></count-sql> -->
</sql>
Original url: Access
Created at: 2020-04-03 14:04:41
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论