V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Braisdom  ›  全部回复第 31 页 / 共 31 页
回复总数  612
1 ... 22  23  24  25  26  27  28  29  30  31  
2020-11-22 10:39:06 +08:00
回复了 Braisdom 创建的主题 Java 历经 3 年,终于得以实现了
@nannanziyu 兄弟,那是对已经出来的数据进行过滤,而不是在 SQL 中过滤的,
2020-11-22 09:29:38 +08:00
回复了 Braisdom 创建的主题 Java 历经 3 年,终于得以实现了
@kingfalse 两者不会冲突,Lombok 有人爱,有人恨,很正常的,就像 Java 一样,你可以爱他,也可以恨他。
2020-11-22 09:28:50 +08:00
回复了 Braisdom 创建的主题 Java 历经 3 年,终于得以实现了
@vone 兄弟我还真看过,Entity Framework 针对 比较运算符和逻辑运算符是无法支持的,例如

SELECT * FROM Orders WHERE OrderID > 10 AND Freight = 1

这类写起来太复杂了。

在 ObjectiveSQL 中,缺很方便。

select.where( order.orderId > 10 && order.freight.eq(1) )
2020-11-22 00:29:00 +08:00
回复了 Braisdom 创建的主题 Java 历经 3 年,终于得以实现了
@shade apijson 好像不是同一类东西
2020-11-22 00:28:37 +08:00
回复了 Braisdom 创建的主题 Java 历经 3 年,终于得以实现了
@liuhan907 什么叫山寨版,相比现有的 ORM 框架,优势主要体现在:
1 )动态代码生成,类似 Lombok
2 ) Java 运算符重载,领先于现有的所有 ORM 框架
3 )函数封装是参考 JOOQ 的
2020-11-22 00:09:25 +08:00
回复了 Braisdom 创建的主题 Java 历经 3 年,终于得以实现了
一门语言,它的语法表现边非常重要,能够准确的描述出业务领域的关键特征,是一段代码可维护性的重要标志
2020-11-22 00:07:57 +08:00
回复了 Braisdom 创建的主题 Java 历经 3 年,终于得以实现了
@VHacker1989 像这样的代码:“ sum(orderTable.amount) / sum(orderTable.quantity) * 100”
你猜 MyBatis, JOOQ, QueryDSL 会写成什么样?
2020-11-22 00:06:10 +08:00
回复了 Braisdom 创建的主题 Java 历经 3 年,终于得以实现了
@VHacker1989
1 )首先我做这个项目前肯定是看过 JOOQ, QueryDSL 这类项目的,它有致命缺点就是 Java 的表达式无法 SQL 表达式重合,这会导致所谓的 SQL Builder 在复杂 SQL 中根本无法使用,我项目里有个计算同环比的简单示例,有大量的数运算和逻辑运算,如果运算符通过函数的形式实现,那样的代码根本无法看。
2 )我的项目中参考了 Lombok 的动态代码生成,能够减少绝大部分的重复代码,它们是无法做的。
2020-11-21 23:50:56 +08:00
回复了 Braisdom 创建的主题 Java 历经 3 年,终于得以实现了
@1194129822 是的,我对比过它的 DynamicSQLBuilder,它做的太土了,大都数都是以字符串的形式体现,我的改进有三块:
1 )动态代码生成:模型中的所有字段都会被动态生成一个 Order 的内部类 Table 中的字段。
2 )算术运算、比较运算符和逻辑运算重载,也就是说 Java 中的 +, -, * / , >, <, &&, || 都会转换成 SQL 语句中的表达式,
3 )我封装了常用数据库的常用函数,例如:count, sum 等有上千个的,这样就不会出现字符

上述做法的好处是,最大程度的避免的 SQL 的语法错误,动态代码提示和单元测试。
2020-11-21 23:36:30 +08:00
回复了 Braisdom 创建的主题 Java 历经 3 年,终于得以实现了
第二段 Java 代码生成的 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`
2020-11-21 23:35:02 +08:00
回复了 Braisdom 创建的主题 Java 历经 3 年,终于得以实现了
补充一下,第一段 Java 代码生成的 SQL 如下:
```sql
SELECT
((((SUM(`T0`.`amount` ) / SUM(`T0`.`quantity` ) )) * 100))
FROM
`orders` AS `T0`
GROUP BY
`T0`.`product_id`
```
大神们有指导建议不
1 ... 22  23  24  25  26  27  28  29  30  31  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5361 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 18ms · UTC 09:14 · PVG 17:14 · LAX 01:14 · JFK 04:14
Developed with CodeLauncher
♥ Do have faith in what you're doing.