f0rb 最近的时间轴更新
f0rb

f0rb

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

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

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

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

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

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

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

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