比 mybatis 强大优雅的 sqltoy-orm-4.10.5 发版了
开源项目地址: https://github.com/chenrenfei/sagacity-sqltoy
感受sqltoy之美: https://chenrenfei.github.io/sqltoy/#/
更新内容:
1、缓存翻译对应的缓存更新机制增加增量更新
2、查询结果计算增加环比计算,请参见sqltoy-showcase下的QueryCaseTest类
sqltoy的代表性特性展示:
1、最优雅的sql编写模式
- mybatis的写法(一板一眼很工程化)
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>
- sqltoy的写法:
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、最具特色的缓存翻译和缓存条件检索,让复杂查询最接近单表查询
1. 感受sqltoy之美--缓存翻译、缓存条件检索
- 缓存翻译和缓存检索化繁为简---查询订单表(简化为单商品订单便于演示)
订单号 | 客户ID | 商品ID | 下单日期 | 商品数量 | 商品价格 | 订单金额 | 订单状态 | 业务员ID | 部门 |
---|---|---|---|---|---|---|---|---|---|
S0001 | C10001 | 101 | 2020-03-10 | 10 | 3000 | 30000 | 02 | 1001 | N002 |
-
要求查询日期在2020年1月10日至3月20日、客户名称中含<<星云科技>>字符的全部订单信息,要求显示商品名称、客户名称、业务员姓名、部门名称、订单状态中文
-
往常的做法:硬功夫硬碰硬系列
关联客户表做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>
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
gowe 1.0.7 发布,Golang 多微信号 SDK
gowe,golang多微信号SDK,readygo子项目API文档 项目源码:https://gitee.com/chunanyong/gowe go get gitee.com/chunanyong/gowe 支持境内普通商户和境内服务商(境外和银行服务商没有条件测试) 全部参数和返回值均使用struct类型传递 缓存前置,使用项目现有的缓存体系 原生支持多微信号 支持跳板请求微信API服务.例如内网服务器没有网络出口权限,可以使用Nginx跳板请求微信API服务 原生支持集群部署 更新内容如下: 增加红包接口 WxPaySendRedPack WxPaySendGroupRedPack WxPaySendMiniProgramHB WxPayGetHBInfo 修改mchType的处理方式,不需要手动指定 暴露FuncGenerateRandomString 函数,用于生成随机的nonce_str字符串 完善对支付沙箱的支持
- 下一篇
MeEdu v2.5 版本上线,基于 Laravel 的在线点播收费系统
新增 added: 幻灯片缓存 added: 首页推荐缓存 added: 视频跑马灯开关 added: 阿里云私密播放配置 优化 优化自动安装程序的检测逻辑 依赖库版本更新 优化课程和视频的评论交互 单元测试覆盖率提高到73% 修复 fixed: http-foundation安全更新 fixed: 缓存失效 fixed: 邀请码结算使用的是被邀请人奖励 fixed: 支付网关获取 Github:https://github.com/Qsnh/meedu Gitee:https://gitee.com/myteng/MeEdu 官网:https://meedu.vip MeEdu 是基于 Laravel 开发的个人在线教育系统。MeEdu诞生的背景:随着知识付费领域的兴起,尤其是知识付费领域的龙头“得到”的成功,知识付费领域俨然成为了新的风口。经过这几年的发展,知识付费领域的基础建设有了很大的进步,市场上面很多知识付费的平台可以在短短几分钟之内搭建一套属于自己的知识付费应用。但是,这并不是我想要的!可能是处于程序员的角度出发,我更在乎的是这套应用是我自己可以完全控制的!所以MeEdu诞...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8