V2EX f0rb 的所有回复 第 1 页 / 共 3 页
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
V2EX    f0rb    全部回复第 1 页 / 共 3 页
回复总数  43
1  2  3  
3 月 9 日
回复了 f0rb 创建的主题 Java 一个对比 JavaORM 框架的小仓库
@jfy98 比 mybatisplus 好用,原生支持分页和分表,不需要额外的插件
3 月 8 日
回复了 jakevin 创建的主题 分享创造 开源了一个 Twitter/X CLI。
主要还是用于做爬虫?
3 月 8 日
回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
@beginor 所以你有没有想过我这里为什么会拿 SpringDataJpa 的 findBy 方法作为切入点呢?
1. 这种后缀就十几个,2. 后缀可以通过插件做提示和检查。
这些都是 SpringData 已经实现的,我在个基础上进一步简化了动态查询条件的组合功能,这个很难理解吗?

mybatis 的 xml 里用 if 拼 SQL 会比定义几个字段更简单吗?那为什么都去用 mybatis-plus 了?

还有你这段 C#代码,你没发现用我前面写的 BookQuery 类可以生成一样涵义的代码吗?

你还是理解不了我说的自动化构建动态查询是什么意思吗?
引入查询对象后,不管是用反射还是代码生成,都是完全可以避免编写和维护这种包含大量 if 语句的代码的。
3 月 8 日
回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
@beginor 有一点我想你没有理解清楚,就是引入查询对象后就可以实现查询语句的自动化构建。比如下面这个类,你看眼字段名就知道每个字段对应的查询条件是什么,完全不再需要去编写方法,用'>=' '>' '<=' 这些逻辑运算符去构建查询语句。这也是为什么需要把逻辑运算符转换成谓词后缀的原因。

public class BookQuery
{
public string Author { get; set; } // author = ?
public int PublishedYearGt { get; set; } // published_year > ?
public int PublishedYearLt { get; set; } // published_year < ?
}

你在 C#里把这个对象转换成 WHERE 语句恐怕连 300 行代码都用不了。
3 月 8 日
回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
@beginor 我知道你的意思。但是如果只学 le lt ge 这些后缀,不光能生成 SQL 语句,还能生成 MongoDB 以及其他 NoSQL 数据库的查询语句,是不是就能体现它的价值了。

https://github.com/doytowin/doyto-query-mongodb 这是支持 MongoDB 的 Java 仓库。
https://github.com/doytowin/goooqo 这是一个 Go 语言版本的实现,同时支持 SQL 和 MongoDB 。
3 月 8 日
回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
@freefcw Specification 接口是先根据查询参数构建 criteria ,再根据 criteria 构建查询语句。如果把 Specification 用到的参数聚合到一个对象中,就是先根据这个对象构建 criteria ,再构建查询语句。然后我就发现构建的查询语句跟这个查询对象直接相关,没必要依赖 criteria 多绕一圈。

https://github.com/f0rb/java-orm-comparison 这个仓库有跟 Specification 的写法做对比的,用 Specification 还是需要写大量 if 语句。用 DoytoQuery 则能根据查询对象自动构建动态查询语句,一行方法都不用写。
3 月 7 日
回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
@beginor 所以 linq 还是需要`if`语句来构造动态查询。

麻烦您评论前先了解一下别人的方案和区别好吗?
引入查询对象后是不需要显示编写`if`语句来构造动态查询的。
查询对象里哪个字段有赋值就把哪个字段的查询条件添加到查询语句里。
这才是 DoytoQuery 和传统 ORM 的根本性区别。
3 月 7 日
回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
@beginor

```c#
var query = from s in dbContext.Students
where s.Age >= 18
select s;
```
你说的是这种么?有第 2 个把 SQL 里的关键字直接拿来当编程语言的关键字的么?这种放其他语言直接编译出错。

JPA 的这些方法就只是普通的接口方法,解析方法名称用的是反射技术,不是编译器技术。
3 月 5 日
回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
@shuangbiaog 纯依赖查询对象实现自动化构建,一行方法都不用写,这里有个对比仓库:
https://github.com/f0rb/java-orm-comparison
3 月 5 日
回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
@beginor Linq 这种需要编译期支持的就算了吧,Linq 真这么好咋没有其他任何编程语言跟进呢?
2 月 10 日
回复了 byp 创建的主题 全球工单系统 2026-02-10 GitHub 崩了
我说呢,隔一会儿就跳这个页面。
1 月 23 日
回复了 f0rb 创建的主题 Java 一个对比 JavaORM 框架的小仓库
@spritecn 还好,Java 的实现包括 web 层有 6000 多行代码,Go 实现不到 3000 行代码,使用起来由于不需要写方法,代码量更少更好维护
1 月 22 日
回复了 f0rb 创建的主题 Java 一个对比 JavaORM 框架的小仓库
@spritecn 是的,不是很好出头,但是在代码量上,DoytoQuery 相比于传统 ORM 框架的优势是实实在在的,性能也领先除 SpringJdbc 外的其他框架。

DoytoQuery 最早一版也有基于 mybatis 的实现,后来做分表的时候发现有问题,换 SpringJdbc 作为执行层了
https://central.sonatype.com/artifact/win.doyto.query/doyto-query-mybatis
1 月 22 日
回复了 f0rb 创建的主题 Java 一个对比 JavaORM 框架的小仓库
@twofox 不太会用,你要是帮忙提交下 jimmer 的代码的话,我可以更新下 README 。或者晚点有时间研究下。
结婚不生小孩,还不是找几个男的一起搭伙过日子
2024 年 9 月 25 日
回复了 f0rb 创建的主题 程序员 元宝搜索弹窗怎么卸载
@MeteorVIP 先卸了,反正 PC 目前主要用来玩游戏了
2024 年 9 月 21 日
回复了 sagaxu 创建的主题 Go 编程语言 面了个 Go 岗位,秒挂
这一面一般应该是高级或者资深开发来面的,可能对方公司没这个梯队的人?
这算是自己在 Windows 上开发的独立软件?
@VVVYGD 是啊,因为所有的查询本质上都是两个值进行比较嘛,只不过不同的语言用的语法不一样
我这里是把比较语法集成到面向对象语言的字段名称上了
一般人有点不理解这个思路,所以感觉好难推广
@VVVYGD "其实就是类似 SQL 解析"
看懂了,我做的东西和你不一样,
你做的是 SQL 转 MongoDB
我做的是对象转 SQL 或者 MongoDB 或者其他 NoSQL 语言
1  2  3  
About     Help     Advertise     Blog     API     FAQ     Solana     905 Online   Highest 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 25ms UTC 22:26 PVG 06:26 LAX 15:26 JFK 18:26
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86