V2EX f0rb
 f0rb 最近的时间轴更新
f0rb

f0rb

V2EX 第 604644 号会员,加入于 2022-12-03 19:45:39 +08:00
今日活跃度排名 17372
f0rb提问技术话题好玩工作信息< href="/member/f0rb/deals" class="cell_tab">交易信息城市相关
DoytoQuery vs SpringDataJPA
  •  1   
    Java    f0rb    1 天前    最后回复来自 f0rb
    17
    一个对比 JavaORM 框架的小仓库
  •  1   
    Java    f0rb    8 小时 54 分钟前    最后回复来自 f0rb
    8
    元宝搜索弹窗怎么卸载
    程序员    f0rb    2024 年 9 月 25 日    最后回复来自 f0rb
    4
    GoooQo 文档上线,欢迎交流
    Go 编程语言    f0rb    2024 年 9 月 21 日
    请教在 Reddit 上推广项目有什么要注意的?
    程序员    f0rb    2024 年 8 月 23 日    最后回复来自 f0rb
    2
    f0rb 最近回复了
    8 小时 54 分钟前
    回复了 f0rb 创建的主题 Java 一个对比 JavaORM 框架的小仓库
    @jfy98 比 mybatisplus 好用,原生支持分页和分表,不需要额外的插件
    1 天前
    回复了 jakevin 创建的主题 分享创造 开源了一个 Twitter/X CLI。
    主要还是用于做爬虫?
    1 天前 回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
    @beginor 所以你有没有想过我这里为什么会拿 SpringDataJpa 的 findBy 方法作为切入点呢?
    1. 这种后缀就十几个,2. 后缀可以通过插件做提示和检查。
    这些都是 SpringData 已经实现的,我在这个基础上进一步简化了动态查询条件的组合功能,这个很难理解吗?

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

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

    你还是理解不了我说的自动化构建动态查询是什么意思吗?
    引入查询对象后,不管是用反射还是代码生成,都是完全可以避免编写和维护这种包含大量 if 语句的代码的。
    1 天前
    回复了 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 行代码都用不了。
    1 天前
    回复了 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 。
    1 天前
    回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
    @freefcw Specification 接口是先根据查询参数构建 criteria ,再根据 criteria 构建查询语句。如果把 Specification 用到的参数聚合到一个对象中,就是先根据这个对象构建 criteria ,再构建查询语句。然后我就发现构建的查询语句跟这个查询对象直接相关,没必要依赖 criteria 多绕一圈。

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

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

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

    JPA 的这些方法就只是普通的接口方法,解析方法名称用的是反射技术,不是编译器技术。
    4 天前
    回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
    @shuangbiaog 纯依赖查询对象实现自动化构建,一行方法都不用写,这里有个对比仓库:
    https://github.com/f0rb/java-orm-comparison
    4 天前
    回复了 f0rb 创建的主题 Java DoytoQuery vs SpringDataJPA
    @beginor Linq 这种需要编译期支持的就算了吧,Linq 真这么好咋没有其他任何编程语言跟进呢?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3345 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 11:52 PVG 19:52 LAX 04:52 JFK 07:52
    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