V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Braisdom  ›  全部回复第 27 页 / 共 31 页
回复总数  612
1 ... 19  20  21  22  23  24  25  26  27  28 ... 31  
2020-12-01 07:54:54 +08:00
回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
@beginor 所谓动态查询也就是根据不同的参数,join 不同的表,或者选择不同的条件,因为参与拼接的对象都是变量,本身就是动态的。
2020-11-30 22:29:51 +08:00
回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
@beginor 给你一段项目的代码(计算一个商品销售的同环比),比较复杂:

你也可以把 SpringBoot 项目运行起来看效果:

https://github.com/braisdom/ObjectiveSql/blob/master/examples/springboot-sample/src/main/java/com/github/braisdom/objsql/sample/model/Product.java#L45


DateTime begin = DateTime.parse(rawBegin + " 00:00:00", DATE_TIME_FORMATTER);
DateTime end = DateTime.parse(rawEnd + " 23:59:59", DATE_TIME_FORMATTER);

// Creating dataset of target, last period and same period last year
Select target = createPeriodSales(rawBegin, rawEnd);
Select lp = createPeriodSales(minusMonths(begin, 1), minusMonths(end, 1));
Select sply = createPeriodSales(minusYears(begin, 1), minusYears(end, 1));

Select select = new Select();
select.from(target)
.leftOuterJoin(lp, createLPJoinCondition(target, lp))
.leftOuterJoin(sply, createSPLYJoinCondition(target, sply));

// Create calculation expression of last period
Expression lpAmount = createLPExpr(target, lp, "total_amount");
Expression lpOrderCount = createLPExpr(target, lp, "order_count");
Expression lpQuantity = createLPExpr(target, lp, "total_quantity");

// Create calculation expression of same period last year
Expression splyAmount = createSPLYExpr(target, sply, "total_amount");
Expression splyOrderCount = createSPLYExpr(target, sply, "order_count");
Expression splyQuantity = createSPLYExpr(target, sply, "total_quantity");

select.project(target.col("barcode"))
.project(target.col("sales_year"))
.project(target.col("sales_month"))
.project(formatMoney(lpAmount).as("amount_lp"))
.project(formatMoney(lpOrderCount).as("order_count_lp"))
.project(formatMoney(lpQuantity).as("quantity_lp"))
.project(formatMoney(splyAmount).as("amount_sply"))
.project(formatMoney(splyOrderCount).as("order_count_sply"))
.project(formatMoney(splyQuantity).as("quantity_sply"));

select.groupBy(target.col("barcode"),
target.col("sales_year"),
target.col("sales_month"));

return select.execute(Product.class);
2020-11-30 21:41:41 +08:00
回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
@beginor

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

select.project(sum(orderTable.amount) / sum(orderTable.quantity) * 100)
.from(orderTable)
.where(orderTable.quantity > 30 &&
orderTable.salesAt.between($("2020-10-10 00:00:00"), $("2020-10-30 23:59:59")))
.groupBy(orderTable.productId);

你可以看一下上述代码在 Jooq 中如果实现
2020-11-30 21:37:34 +08:00
回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
JOOQ 称为动态查询,在 ObjectiveSQL 里称为复杂查询,详细请查询:2 复杂 SQL 查询
2020-11-30 15:31:34 +08:00
回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
@renyijiu OK,之前是理解有对,这个问题我之前遇到过,ObjectiveSQL 已经兼容了,

之前我的一个项目是通过 ProtoBuffer 定义的模型,传输的数据极大,但需要直接存储进数据,如果中间再经过一层转换,性能太差,所以我就在 ObjectiveSQL 中设计了 DomainModelDescriptor,用于描述存储数据类型相关的信息,可以直接通过 ObjectiveSQL 进行数据库操作。

具体你可以参考: https://github.com/braisdom/ObjectiveSql/blob/master/core/src/main/java/com/github/braisdom/objsql/DomainModelDescriptor.java
2020-11-30 13:36:29 +08:00
回复了 caiji11 创建的主题 Java 哪里可以下载到 Java 抽象语法树的源码包呢
@caiji11 你看一下你的路径,找到 tools.jar ,确认一下你的 jdk 版本
2020-11-30 13:24:01 +08:00
回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
@renyijiu protobuf 只是一个协议封装,用在数据传输的,现在比较流行,相比很早的 TLV 灵活很多。rpc 只是远程调用,现在微服务里比较流行
2020-11-30 13:05:36 +08:00
回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
@chinvo 我也有同感,我之前写了很多年的 Java,中途写 Ruby 和 Python,也是最近两年才又写 Java,ORM 又是一个系统无法避免的问题,用起来太痛苦,所以才会写 ObjectiveSQL 这个项目的。

Java LINQ 也有,但很不好用,只能处理一些相对简单的查询,join 子查询,union,复杂表达式等(多层 case when 或者窗口函数等),这些处理起来很不舒服
2020-11-30 12:54:48 +08:00
回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
@chinvo 我之前没有接触过.NET 的 entity framework,也是最近才看到,

我设计 ObjectiveSQL 的主要目的是为了解决复杂 SQL 的处理,现有的框架维护动态 SQL 太痛苦,时间一长,项目根本无法维护。

简单 SQL 现有的框架已经做的很不错了,只是顺带把它做了而已
2020-11-30 12:48:50 +08:00
回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
@chinvo .NET 的发展过程值得学习
2020-11-30 12:42:48 +08:00
回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
@beginor 感谢支持,下一阶段 ObjectiveSQL 项目的主要工作是:数据迁移(Migration) 和 SQL 注入(SQL Injection)
2020-11-30 12:41:27 +08:00
回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
@GM
@beginor
两位,先陈述一下我的设计思路,问题域分两块:SQL 域和 Java 所解决的业务域,在业务域中存在的是对象行为,创建(create),更新(update),和销毁 /删除(destroy),而 SQL 中通常是 Insert, update, delete 。

我的设计来自于 Rails 的设计,本质上怎么用问题都不大,只是习惯问题而已
2020-11-30 11:35:00 +08:00
回复了 Braisdom 创建的主题 程序员 ObjectiveSQL 稳定版本发布 1.4.0
是的,SQL 注入是 ObjectiveSQL 下一阶段的重点特性
2020-11-30 10:31:34 +08:00
回复了 caiji11 创建的主题 Java 哪里可以下载到 Java 抽象语法树的源码包呢
JDK1.8 可以这样配置,1.8 以后不需要:
```xml
<dependency>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${java.home}/../lib/tools.jar</systemPath>
<optional>true</optional>
</dependency>
```

https://github.com/braisdom/ObjectiveSql 这里有详细应用
2020-11-29 20:24:13 +08:00
回复了 RedrumSherlock 创建的主题 Java Spring 相关,有没有什么好的解决方案
刚刚仔细看了楼主的贴子,像这类问题也比较容易解决:动态代理
不同微服务中使用同一个领域模型是正常的,但不同微服务中根据自身的技术特性,对模型也会有不同的技术型定义,这是很正常的需求。

解决方法:在能用的 JAR 中通过 Java Interface 定义领域模型,JPA 中只是实现这个 Interface,其它的微服务只看到 Java Interface,在不同微服务之间进行模型传递时,通过一个动态代理的对象工厂创建这个接口的实例。

这样就可以不需要在所有的微服务中看到 JPA 的 Entity 了,它们看到的只有领域模型的 Interface,只不过需要定义好对象传输的协议,和反序列化的逻辑。
2020-11-29 15:02:53 +08:00
回复了 Braisdom 创建的主题 Java Java ORM 中简洁的关联对象查询和分页查询
@beginor 还有一点,我想阐述一下,不存在什么老树开新花,我的目标是改变传统的 Java 编程模型,Spring 是现在比较流行的编程模型,但我想一步一步改变它,先坐 ORM 开始
2020-11-29 14:50:16 +08:00
回复了 Braisdom 创建的主题 Java Java ORM 中简洁的关联对象查询和分页查询
@beginor 本质上,我也设计过 JVM 的语言,之前命名为 JDS(Java Database Script),但最终发现,所谓的新型的语言还是和传统 Java 语言结合太紧密,所以也就放弃了。还是改造现有的 Java 语言最为实际。

我觉得 Lambda 不是最优的方法,我的目标是忘记 SQL 的存在,以 Java 编程模型解决数据查询和分析,以过程化的方式解决 SQL 编程的复杂性。我的 github 上有大量老外关注的,我也在尝试在国外的社区推广
2020-11-29 10:40:49 +08:00
回复了 RedrumSherlock 创建的主题 Java Spring 相关,有没有什么好的解决方案
我一直都不明白,为什么会存在 POJO,VO,DTO, Entity 这些概念,纯属过于理论化的抽象,脱离实践太远,完全没有考虑开发过程中的理解的复杂度。
2020-11-29 10:35:08 +08:00
回复了 Braisdom 创建的主题 Java Java ORM 中简洁的关联对象查询和分页查询
@wdwwtzy 相信 ObjectiveSQL 将是 ORM 的一个新的巅峰
2020-11-28 15:05:10 +08:00
回复了 Braisdom 创建的主题 Java Java ORM 中简洁的关联对象查询和分页查询
@VHacker1989 如果你真用了 MyBatis 的 PageHelpper 你再体验一下 ObjectiveSQL 你会觉得 MyBatis 做的太 Low 了,
如果你再看一下两者的代码,就觉得 MyBatis PageHelpper 更 Low 了
1 ... 19  20  21  22  23  24  25  26  27  28 ... 31  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2751 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 16ms · UTC 02:05 · PVG 10:05 · LAX 18:05 · JFK 21:05
Developed with CodeLauncher
♥ Do have faith in what you're doing.