ObjectiveSQL 1.3.6 版本发布,过程化 SQL 编程&等价表达式

Java大拿 2020-11-09 11:38:09 ⋅ 717 阅读

ObjectiveSQL 第一个正式版本提供了自动生成代码的特性,替代了简单SQL 的编程的编码工作,紧接着推出复杂SQL的解决方案。

ObjectiveSQL 通过修改Java 编译器,实现了运算符重载,可以实现Java 的运算符直接映射为SQL 的运算符,可以实现表达式的一致性,从而实现SQL 的过程化编程,使得复杂SQL 的编程变得简洁、易懂,具体请参考官方文档。

官方地址:http://www.objsql.com

Github: https://github.com/braisdom/ObjectiveSql

Gitee: https://gitee.com/mirrors/ObjectiveSql

IntelliJ IDEA 插件(由于1.2.7 版本还未上线,请参考文档安装):http://www.objsql.com/docs/basic/intellij

  1. 过程化SQL 编程
// Calculating the member related order data 
Member.Table memberTable = Member.asTable();
Order.Table orderTable = Order.asTable();

Select select = new Select();

select.from(orderTable, memberTable);
select.where(orderTable.memberId.eq(memberTable.id));

select.project(memberTable.no, memberTable.name, memberTable.mobile);

select.project(countDistinct(orderTable.no).as("order_count"))
        .project(sum(orderTable.quantity).as("total_quantity"))
        .project(sum(orderTable.amount).as("total_amount"))
        .project(min(orderTable.salesAt).as("first_shopping"))
        .project(max(orderTable.salesAt).as("last_shopping"));

select.groupBy(memberTable.no, memberTable.name, memberTable.mobile);

上述代码生成的SQL 如下:

SELECT
	`T0`.`no` ,
	`T0`.`name` ,
	`T0`.`mobile` ,
	COUNT(DISTINCT `T1`.`no` ) AS `order_count`,
	SUM(`T1`.`quantity` ) AS `total_quantity`,
	SUM(`T1`.`amount` ) AS `total_amount`,
	MIN(`T1`.`sales_at` ) AS `first_shopping`,
	MAX(`T1`.`sales_at` ) AS `last_shopping`
FROM
	`orders` AS `T1`,
	`members` AS `T0`
WHERE
	(`T1`.`member_id` = `T0`.`id` )
GROUP BY
	`T0`.`no` ,
	`T0`.`name` ,
	`T0`.`mobile`

2. 等价表达式(Java 计算表达式可以映射为SQL 语句表达式)

Order.Table orderTable = Order.asTable();
Select select = new Select();

select.project(sum(orderTable.amount) / sum(orderTable.quantity) * $(100) )
    .from(orderTable)
    .groupBy(orderTable.productId);

上述代码生成的SQL 如下:

SELECT SUM(order.amount) / SUM(order.quantity)  * 100
      FROM orders AS order GROUP BY order.produc_id

全部评论: 0

    我有话说:

    挖一挖那些让公司网站瘫痪的SQL“终结者”

    一条慢查询会造成什么后果?之前我一直觉得不就是返回数据会慢一些么,用户体验变差? 其实远远不止,我经历过几次线上事故,有一次就是由一条 SQL 慢查询导致的。 那次是一条 SQL 查询耗时达到 2

    Julia 1.6.0 发布,高性能动态高级编程语言

    Julia 1.6.0 现已发布。Julia 是一个高性能动态高级编程语言。其拥有丰富的函数库,提供了数字精度、精致的增幅器和分布式并行运行方式。核心函数库等大多数库由 Julia 编写,但也用成熟

    CrateDB 4.3.1 发布,分布式 SQL 数据库

    CrateDB 4.3.1发布。Crate 是一个开源的大规模的可伸缩的数据存储系统,无需任何系统管理需求。提供强大的搜索功能。用于存储各种表格数据、非结构数据和二进制对象。并可通过 SQL

    Druid 1.2.4 版本发布,增强 SQL Parser,支持 JDK8 日期类型

    Druid 1.2.4 版本现已发布,这个是一个小的 bug 修复版本,修复了一系列 SQL Parser 的问题,增强对 JDK 8 的支持。 Issues SQL Parser 增强对

    Spring Boot 2.3.6 发布,Bugfix 版本

    Spring Boot 2.3.6发布,可从 Maven 中央仓库获取新版本。 <!-- https://mvnrepository.com/artifact/org

    JimuReport 积木报表 1.3.3 版本发布,可视报表工具

    项目介绍 积木报表,是一款免费的可视Web报表工具,像搭建积木一样在线拖拽设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! 秉承“简单、易用、专业”的产品理念,极大的降低报表开发

    详细讲解一下Hadoop3.2 集群新版本的搭建过程

    详细讲解一下Hadoop3.2 集群新版本的搭建过程

    Python 3.8.6 发布

    Python 3.8.6 发布了,它是 Python 3.8 的第六个维护版本3.8 系列的维护版本将每两个月定期更新一次,3.8.7 计划于 2020 年 11 月中旬发布。 随着维护版本

    数据生成工具 ZenData 发布 1.5 版本,新增 CSV 和 Excel 输出格式,字段定义支持表达式

    随着DevOps的日益流行,越来越多的团队开始关注持续集成和持续交付。在这种大背景下,自动化测试就越来越重要了。那么问题来了,如何能够实现大规模、工程的自动化测试呢?这里面会涉及到诸多的问题,比如

    Redis 6.0.10 发布维护版本

    Redis 6.0.10 现已发布,这是一个维护版本,升级迫切性等级为中等:修复了一些具有中等影响的错误。具体更新内容如下: Command behavior changes

    Redis 6.2.1 发布

    Redis 6.2.1 现已发布,该版本升级迫切性程度为低:修复了编译问题。具体更新内容如下: Bug 修复 修复带有已删除记录的 stream 的 sanitize-dump

    Spring Boot Admin 2.3.1 发布,轻量的图形监控工具

    Spring Boot Admin 2.3.1 发布,这是一个错误修正版本。现在可以从 maven 仓库 下载,支持 2.3.0 平滑升级 <dependency>  

    Scala 3 来了,Dotty 发布 3.0.0-M1 版本

    Dotty 发布3.0 的首个里程碑版本 3.0.0-M1,Dotty 作为 Scala 尝试新的语言概念以及编译器技术的研究平台,它最终将成为 Scala 3.0。 Dotty 对

    Python ORM框架SQLAlchemy 1.3.20 发布

    SQLAlchemy 1.3.20 发布了。SQLAlchemy 是一个 Python 的 SQL 工具包以及数据库对象映射(ORM)框架。它包含整套企业级持久模式,专门用于高效和高性能的数据库

    强大的 Lambda 式转 Sql 类库 - SqlSugar 隐藏功能之 Lambda

    使用场景 1、Lambda to sql 一直是ORM中最难的功能之一,如果有现成的解析库那么自已写一个ORM难度将大大降低 2、通过Lambda作为KEY进行缓存操作,特别是仓储模式想要拿到表达式

    RediSearch 1.6.15 发布,高性能全文搜索引擎

    RediSearch 1.6.15 现已发布,这是1.6 版的维护版本,更新紧急程度较低。具体更新内容如下: Details: Minor enhancements: #1225

    Tokio 1.0 发布,Rust 异步编程框架

    Tokio 1.0 稳定版本发布,Tokio 是 Rust 的异步 runtime,可用于编写快速、可靠的网络应用。Tokio 还提供用于 TCP、UDP、计时器、多线程、工作窃取算法(work

    「尝鲜」SpringBoot 快速整合Swagger 3.0

    第一步:Maven引入Swagger3.0 starter依赖 Maven项目中引入springfox-boot-starter依赖: <dependency> <

    JavaScript 引擎 V8 发布 8.3 版本,性能提升

    JavaScript 引擎 V8 发布了 8.3 版本