V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  f0rb  ›  全部回复第 1 页 / 共 2 页
回复总数  39
1  2  
5 小时 14 分钟前
回复了 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 。
5 小时 21 分钟前
回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
@freefcw Specification 接口是先根据查询参数构建 criteria ,再根据 criteria 构建查询语句。如果把 Specification 用到的参数聚合到一个对象中,就是先根据这个对象构建 criteria ,再构建查询语句。然后我就发现构建的查询语句跟这个查询对象直接相关,没必要依赖 criteria 多绕一圈。

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

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

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

JPA 的这些方法就只是普通的接口方法,解析方法名称用的是反射技术,不是编译器技术。
2 天前
回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
@shuangbiaog 纯依赖查询对象实现自动化构建,一行方法都不用写,这里有个对比仓库:
https://github.com/f0rb/java-orm-comparison
2 天前
回复了 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 语言
@VVVYGD 所以你这里每条查询都需要构造一次类似这样的条件是吧:#b" local="abc" && (xx=1 || b=2 && c=3)",那你这种怎么重用了,到处都是字符串吗?你这里不过是把 AND 换成&&,OR 换成||了,别的和 SQL 有什么区别呢?你并没有造出个新轮子,只是给旧轮子涂了层新漆。

你要考虑到做一个信息系统, 前端都会有多个输入框由用户填写查询条件进行搜索,而多个查询条件是可以任意组合的,只能靠 if 语句判断用户是否填写了某个条件来决定是否拼接对应的条件,不知道这种场景你是怎么处理的。

pub enum MongoOp {
Eq,
Gt,
Gte,
Lt,
Lte,
Ne,
Like,
NotLike, // { item: { $not: { $regex: "^p.*" } } }
In,
NotIn,
}

我看你这里都定义了这些谓词了,你直接把列名和他们拼接成 ageGt 这样,再解析成条件岂不是方便多了。
@VVVYGD 而且使用字符串不利于 IDE 的代码检查还有代码重构和复用
@VVVYGD 不一样哦,a > 1 对应 field(a, gt,1) 需要 3 个参数,而 aGt 只需要一个参数,值是跟着参数传进来
前后端传参也不一样的方式也不一样,aGt=1 对应 json 是{"aGt":1}, 或者是?aGt=1&b=2, 不太清楚你这个前端参数是怎么传的,我这也有个构造或语句的例子: https://juejin.cn/post/7409608924054700047
2024 年 9 月 7 日
回复了 seekseat 创建的主题 Go 编程语言 运算符重载有什么实际用途?感觉很鸡肋
那路径里面 windows 的\怎么处理呢,只在 linux 上开发?
1  2  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   889 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 25ms · UTC 22:14 · PVG 06:14 · LAX 14:14 · JFK 17:14
♥ Do have faith in what you're doing.