V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zsmile
V2EX  ›  Java

国内的 Java 体系真的很落后吗?

  •  
  •   zsmile · 1 天前 · 9821 次点击

    看到别人说推荐一个 java 架构,默默想了下好像在公司里面看到的大多数都是 springBoot+mybatis 的形式,DDD 推出后好像也没看到什么公司用,是只有大公司在用吗?那现在国内外比较新的 java 架构都有啥呢?

    第 1 条附言  ·  17 小时 53 分钟前
    说明一下
    1. 这里提到架构只是感觉好像接触到的都是属于 MVC 、分层、微服务一类的,DDD 感觉算设计,也算架构的一种吧。(不对勿喷)
    2. 框架上的话,确实好用能提效就行,主要使用的 ORM 框架也是 mybatis 加一些增强框架( mybatis-plus\fluent-mybatis\或者用 mybatis 的 provider 自己写了一个简单的增强)。对于 orm 真的都是简单的直接用,复杂写 SQL ,所以 mybatis 用的倒还习惯
    3. 技术选型上基本都是以 Spring 为主,都是跟着一路用 mvc ,webflux 什么的,都是换框架。这些框架的底子思想,都是出现很久了。

    所以主要问题:都是个人观点,欢迎讨论
    1. 架构。每个语言其实都差。不多,该分分,该拆拆,做通信,做协调什么的。都谈不上落后吧?
    2. 框架。主要以 mybatis 为主的我,就想看看大佬们的意见
    115 条回复    2025-01-09 23:37:56 +08:00
    1  2  
    luoyou1014
        1
    luoyou1014  
       1 天前   ❤️ 2
    springboot 不落后,mybatis 是真的落后……
    shihty5
        2
    shihty5  
       1 天前
    DDD 也没几家公司在用的
    coala
        3
    coala  
       1 天前
    一般用 MyBatis-Plus 做表的增删改, 查询 JPA 写起来也不咋舒服呀... 还不如写 SQL 呢.
    bk201
        4
    bk201  
       1 天前
    java 本身特性也不是追求这种"新",追求新可以用其他语言,轮子日新月异。
    zsmile
        5
    zsmile  
    OP
       1 天前
    @luoyou1014 我也觉得,感觉太老了,迭代也没那么强。Jooq 就比较新吗?
    zsmile
        6
    zsmile  
    OP
       1 天前
    @shihty5 但是面试时已经有问这方面的了。
    @coala 我也觉得,但是好像比 mybatis-plus 好用的越来越多,感觉新出的都会来拉踩一下
    zsmile
        7
    zsmile  
    OP
       1 天前
    @bk201 主要是太旧了,也不太好,感觉适当迭代到 jdk17 就挺好的。有些确实能提高效率吧
    luoyou1014
        8
    luoyou1014  
       1 天前
    @zsmile 瞄了一眼 jooq 的文档,Api 设计的也很一般,还是建议多看看其他语言的 orm 框架,感觉 java 的 orm 设计者都没看过其他语言的 orm 设计,明明其他语言的 orm 设计都是相互借鉴的……
    garyxi24
        9
    garyxi24  
       1 天前 via iPhone   ❤️ 1
    怎么能叫落后呢,分明是遥遥领先,fr
    国外讨论的全是 python 、js 、go 这些,你一说 java 人以为啥上古神器呢
    JoeDH
        10
    JoeDH  
       1 天前
    @luoyou1014 #1 现在用啥
    sagaxu
        11
    sagaxu  
       1 天前
    国内 Java 技术栈普遍在 2015 年左右,但不是都那么陈旧,也有好多公司开始用 quarkus/vert.x ,用 JPA 和 JOOQ 甚至 JdbcTemplate 的其实也不少,反正我主导的项目里没出现过 mybatis 相关的东西。
    xiaogu2014
        12
    xiaogu2014  
       1 天前
    我有个疑问。不清楚去你说的 java 架构是啥意思。springboot 。mybatis 可以和 dropwizard/dagger 这种做对比。ddd 是一个抽象的概念。你也可以把 ddd 用到 springboot 上。

    看了一圈回答感觉你知识想问 java 有哪些新的技术框架。。。。github 语言选择 java 去看热门项目。
    Essaim
        13
    Essaim  
       1 天前
    个人观点,对开发来说,国内都是业务驱动,能承载业务,降低开发、学习成本的工具就是好工具,谁还不是个 crud boy 。
    对老板来说,国内的开发就是 java 体系主流,java boy 一抓一大把,用人成本低廉,换个齿轮的成本极低,根本没理由推动新技术落地,你换个小众一点的技术体系,招个人焦头烂额水平还参差不齐,招到差的产出的质量说不定把新技术的优势都抵消了,老板肯定是不愿意的。
    你说大佬?开发轮子的大佬根本不需要考虑这个问题,自然有能力推动最佳实践,良禽择木而栖。
    cheng6563
        14
    cheng6563  
       1 天前
    @zsmile #5 就是个 SQL 模板引擎,够用就行了,迭代个啥。Java 自己就落后的很,字符串模版一直难产,mybatis 不就只能继续用。
    NoKey
        15
    NoKey  
       1 天前
    你以为就国内卷,国外不卷?不卷的话,这些新东西怎么出来的?新东西,它可不仅仅是技术进步,更多的是经济利益,个人的,公司的,巴拉巴拉,国外那帮人,为了技术一直牵引全球(收割韭菜),当然就不停的发明各种新技术,新概念,增加复杂度等等。
    另外就是实际应用场景的区分,国外很多场景他就遇不到,比如人员数量的差异,国内很多场景下人员数量是国外的几倍,然后一些架构复杂性,比如国内特有的一些,xxx 领导主管 xxx ,负责 xx 业务,在 xxx 场景下他要排第一,在 xxx 场景下他要排第二等等,我不知道国外讲不讲这种办公室政治,反正国内这种,类似的 oa 系统,做出来超级复杂,不是技术负责,是业务难度复杂,导致不得不写出很复杂的 sql ,或者很复杂的数据表,这种情况下,mybatis 可能是比较适合的,那干啥要换呢?
    llzzll1234
        16
    llzzll1234  
       1 天前   ❤️ 3
    springBoot+mybatis 是技术选型,DDD 是系统构架...这都不是一个东西,所以你到底想问什么..
    Configuration
        17
    Configuration  
       1 天前
    落后就落后吧,能赚钱就行,金融行业还有很多 COBOL 代码呢
    luoyou1014
        18
    luoyou1014  
       1 天前   ❤️ 4
    @JoeDH java 是只学过 jpa 和 mybatis ,没在实际项目中使用过,实际用过 C#的 ef core ,ruby on rails ,php laravel ,python sqlalchemy

    从我的实际体验中,ef core 最强大也最完备,可以拥有完美的 ide 支持,ruby on rails 最灵活但完备性不足,无法依赖编辑器的高亮提示,laravel 和 rails 差不多,灵活性差一些,但完备性好很多,sqlalchemy 有点类似于弱化版的 efcore

    jpa 方向是和这些 orm 框架一致的,但实际使用太繁琐了,mybatis 不能叫 orm ,只能称之为 db_tool 工具集
    angryfish
        19
    angryfish  
       1 天前
    1.首先 springboot 这些和 DDD 没关系
    2.DDD 这些根本就不好用,而且也是很多年的产物,估计也是有 20 年了吧,并不比 java 新多少
    3.实践是最好证明,这么多年,java 对于业务系统,确实是最佳的。python ,go 之类的扛不住。
    chendy
        20
    chendy  
       1 天前
    DDD 啥的,大公司一样不用,国外一样不用
    只能说接触到的国外的项目都是比较好的,剩下的一些,以及相关二开的,一样是一坨屎
    sampeng
        21
    sampeng  
       1 天前   ❤️ 1
    有一说一,国外?国外现在流行 next.js 一把梭。做起来再改语言,能不能活还打个问号呢。先不谈是不是牛马,这没法聊下去了。国内的整体研发体系的效率就是比海外高,为什么高?人家在那吭哧吭哧先设计再写代码,单元测试啥都一个不漏。国内?呵呵,又不是不能用,先跑起来,线上调试就是一个热更新的事。整个对比我觉得不是在一个概念上的对比,完全没有什么意义。结论就是,谈技术研发架构,就不要拿国内和国外对比。
    billbob
        22
    billbob  
       1 天前
    jdk 21,spring boot 3.4,webflux,r2dbc,spring ai

    你只要跟着 spring boot 最新版本更新,就自然而然知道了.

    国内多落后
    arfa
        23
    arfa  
       1 天前   ❤️ 2
    DDD 也不是什么新的东东, 早在 2004 年就由埃里克·埃文斯提出,现在都有 20 年了
    为什么流行不起来?
    Ayanokouji
        24
    Ayanokouji  
       1 天前
    有啥落后的。jpa 就比 mybatis 好用? 用注解写就比 xml 好? mybatis 也支持注解
    3 张表以上的 join ,写写就明白了
    cvbnt
        25
    cvbnt  
       1 天前 via Android
    决定技术架构的是高级开发架构师甚至是老板,这些人通常是有作为招聘角色的可能性存在的,从招聘来讲满足业务情况下选大家都会的就行了
    zoharSoul
        26
    zoharSoul  
       1 天前
    ddd 根本不好用
    wysnxzm
        27
    wysnxzm  
       1 天前
    @Ayanokouji #24 join 建议多些,这样分库或者做性能优化的时候得的教训才够深刻
    Geekerstar
        28
    Geekerstar  
       1 天前
    @xiaogu2014 Java 热门项目好多都是面试文档
    GeekGao
        29
    GeekGao  
       1 天前
    ❌ 国内 vs 国外
    ✅ 国内 vs 某国
    agagega
        30
    agagega  
       1 天前 via iPhone
    如果 mybatis 的优点是对自定义 SQL 支持比较好,那为什么国内对自定义 SQL 的需求更大呢
    iminto
        31
    iminto  
       1 天前 via Android   ❤️ 2
    首先,DDD 是落后玩意。
    其次,Mybatis 不好用
    最后,其他语言不比 Java 高级。
    ryougifujino
        32
    ryougifujino  
       1 天前 via iPhone
    @arfa DDD 门槛太高了,真正懂的就没几个。首先理解起来就很复杂,其次不单是编码的战术层面要实施,而是要从领导、产品、等等非编码人员都要充分互相沟通,从战略上实施。
    ryougifujino
        33
    ryougifujino  
       1 天前 via iPhone
    @iminto DDD 只是门槛高,思想是很先进的,并不落后。
    imokkkk
        34
    imokkkk  
       1 天前
    @agagega 因为产品需求足够奇葩
    CC11001100
        35
    CC11001100  
       1 天前   ❤️ 2
    万年 Java8 ,为了维护兼容 JDK8 的项目,我还专门写了个脚本。。。🤣

    https://github.com/scagogogo/mvnrepository-helper-UserScript
    coolair
        36
    coolair  
       1 天前
    很落后,还在 SSH 呢。
    sujin190
        37
    sujin190  
       1 天前 via Android
    公司一堆瞎搬硬套所谓 DDD 的真是够无语的,看着挺高大上的其实做的一塌糊涂,bug,多有牛毛,哪那么多场景需要你用全套的 DDD 啊,本来就不是啥多先进的东西,不过是工程需要罢了,搞什么技术崇拜啊
    kbyyd24
        38
    kbyyd24  
       1 天前   ❤️ 1
    DDD 还是香的。但是它确实门槛高,需要开发能够理解业务,整个团队需要形成统一语言。这在一些公司确实难做到。

    MyBatis 倒是接触过一点遗留项目里的,真的是太恶心了,XML 里面写 SQL ,SQL 里面嵌套 XML 写逻辑。。。反正我是不理解。我觉得还不如 JPA 。
    当然我也不是夸 JPA ,JPA 在项目刚开始的时候还算香,但是遇到性能问题、连表查询就头痛了。
    用 JDBC 手搓 SQL 也不是不行,现在 IDEA 的提示已经可以避免掉 SQL 里出现 typo 的问题了。
    不过我还是最喜欢 JOOQ ,真的香。像 querydsl 一样的 type safe sql ,并且还不是 JPA ,不会让你写不出想要的 SQL 。当然也有缺点,就是不好写单元测试。不过前面几个好像也不行 🤣。有条件的话可以用 testcontainers 起一个 docker 来跑集成测试,跑不了 docker 的话也可以考虑用一个 embedded DB 。

    但是我觉得 SQL 这部分最恶心的还不是这些框架的限制,而是有的人会写出几十上百行 SQL (不管国内国外)。这种代码根本没有维护的欲望。DDD 里的聚合根其实可以一定程度上规避这种问题,限定数据库查询的范围,需要范围之外的数据就用别的 SQL 单独去查询一下。
    liuliuliuliu
        39
    liuliuliuliu  
       1 天前
    @luoyou1014 #18 总结的很到位,尤其最后一句,其他语言也确实很难实现 C#的 ef core
    echo1937
        40
    echo1937  
       1 天前
    @agagega 国内非互联网公司中,政企项目占比极大,其中又以信息化项目居多(就是以前这块都是实体纸质管理现在要信息化),这时候你会发现 甲方的话语权很大/需要向实际情况妥协 (怎么你还想改革甲方的实际业务流程吗),这是 面向 sql 编程 的最适宜场景了。
    gaojiangouyu
        41
    gaojiangouyu  
       1 天前   ❤️ 2
    在.NET 用过 ef core 的人再用回 mybatis ,真的觉得恶心
    diagnostics
        42
    diagnostics  
       1 天前   ❤️ 4
    数据库访问一般就是两个门派:

    - JPA 、Hibernate 等 ORM:这类就是解决大部分 CRUD 需求的,简单的查询,涉及到多表,复杂查询就会性能低下,上手门槛也更高
    - JDBC Temple 、MyBatis 、JOOQ 这类 SQL Helper:这类就是解决复杂查询的,因为本来就是 SQL ,想咋写就咋写


    因为本来就是 SQL ,因此先说说第二类的发展历程,一开始大家写 JDBC 还好,写多了发现模板代码太多了,主要是两个层面,一个是连接这边的代码,一个是 ResultSet 做数据转换的代码,所以诞生了类似于 Apache Commons DbUtils 这种工具来简化,在 Spring 环境中则是 Spring JdbcTemplate 。

    接下来事情就会朝着两极发展,还是先从 SQL 说起

    Commons DbUtils 、JdbcTemplate 这类框架只简化了连接和响应映射,在动态 SQL 的支持比较少,因此诞生了 MyBatis 也就是 JdbcTemplate 高级版,通过模板引擎解决动态 SQL ,并且支持预定义的一些 SQL

    当然 Mybatis 被人诟病的 XML ,还有动态能力在复杂场景还是有限的,例如写一个递归形式的动态条件(再举个例子,DAO 方法只穿入一个 filter ,这个 filter 可以是普通的 KeyValue 过滤,也可以多个 KV 组成的 AnyOf 和 AllOf 多重过滤,后两者对应的就是 id in (select id from t where f1 and/or f2 and/or f3...),这里面还可以动态拼接,我认为这种在 Java 里要用多态和类型匹配去做,MyBatis 对这个支持就不太行)

    讲完了问题,就引出解决 MyBatis 这个陈旧框架的升级版 JOOQ ,这里用 TypeSafe 的 API 来编写复杂 SQL ,一来不需要频繁和 SQL 直接交互( Mybatis 也有一些这种痛点),也能避免出错;二来动态能力增强了,我能在 Java 代码而不是 XML 了编写内容。

    到这里就是 SQL 帮助类这一方向发展的极端了(如果有更好的框架,可以提出),这里没有提到其他帖子的注入 MyBatis Plus (Join ),tk mybatis 等增强,而是因为他们要做的事情和 JPA 类似。

    接下来谈谈 JPA ,JPA 的诞生我认为是解决 Commons DbUtils 、JdbcTemplate 这类框架中,对于一个表应该有的大部分普通操作 CRUD 没有预定义好一些模板代码,导致用户又需要频繁去写 findById ,findAll ,findCountByXXX 等操作(如果直接用 MyBatis ,也有这个问题,因此没有一个方案是一劳永逸的),简单来说我认为 JPA 就是用面向对象的方式编写简单查询,然后无感生成对应的模板 SQL 。但是这里的问题在于,JPA 这种注解时,方法名编写查询的方式,注定写不了复杂 SQL ,这又是一个新的问题。

    总结,合并,从整个历程来看,数据库访问技术里,最终是趋向两个方向:简单查询自动生成、复杂 SQL 查询代码动态化,一个是前期需求,一个是后期需求。

    以 MyBatis 和 JPA 举例,这两个框架都诞生了融合二者的三方框架:

    - MyBatis Plus/ Mybatis Plus Join/ tk.mybatis
    - JPA Criteria API, JPA QueryDSL

    JPA/Hibernate 不能替代 SQL 。您应该充分利用 JPA 和 SQL ,并将它们组合成一个成功的解决方案。
    MyBatis + 自动生成类增强插件似乎可行,但 MyBatis 自身的 SQL 能力不够强力,加上生成框架大部分就是国人写的,我并不是说国人的技术能力不行,而是国内这个职场氛围和文化,诞生不出来好的框架,原因有很多:996 、35 毕业、生存压力(投放广告),相对于 QueryDSL 、JOOQ 而言,国内的插件生态,文档不完善,功能不丰富。。。
    sagaxu
        43
    sagaxu  
       1 天前
    @diagnostics
    @kbyyd24

    JOOQ 很好,但是贵啊,免费版有两个致命不足,专业版年费 3000 元,企业版年费 6000 元,按运行设备算。

    1. 免费版不支持 oracle, sqlserver 等商业 DB 。曾经我有个奇葩项目买的起 db2 却没预算买 JOOQ 。
    2. 免费版只支持最新版本的开源 DB ,想用 MySQL 5.x ,要么加钱要么用老版本。

    如果没有这两个限制,使用要广泛的多。
    xuanbg
        44
    xuanbg  
       23 小时 4 分钟前   ❤️ 10
    编程领域最基本的数据结构和算法,都是几十年没变过的东西了。年龄比你爹还大,我就问你老不老?你只需要把这些老得不能再老的东西学明白,写代码就能做到随心所欲。想写 Java 写 Java ,想写 Go 就写 Go 。当你真的学会了编程而不是编程语言、框架、三方库,什么新鲜工具你还能玩不转?
    miaotaizi
        45
    miaotaizi  
       19 小时 40 分钟前
    @xuanbg 楼上的在理

    一帮子人成天这框架, 那架构的, 看着都烦
    roundgis
        46
    roundgis  
       19 小时 29 分钟前 via Android
    @sagaxu 用這玩意通常是客戶埋單的
    ZGame
        47
    ZGame  
       19 小时 12 分钟前
    @billbob r2dbc 可一点都不好用啊 ,Mono 响应式那种更恶心
    fantasy0v0
        48
    fantasy0v0  
       19 小时 8 分钟前
    有没有哪个 ORM 或者 db tool 能实现这个效果呢?
    fantasy0v0
        49
    fantasy0v0  
       19 小时 5 分钟前
    @fantasy0v0 const { id, name } = select id, name from student; 变量 id 和 name 的类型与 sql 返回的对应的列的类型一致。
    TanKuku
        50
    TanKuku  
       18 小时 56 分钟前
    JOOQ + kotlin 不知道多好用
    Pursue9
        51
    Pursue9  
       18 小时 50 分钟前
    用 Mybatis-Plus ,简单的 CURD 不用写 sql ,复杂的查询用 sql
    witcherhope
        52
    witcherhope  
       18 小时 43 分钟前
    说的对,这些框架玩意换汤不换药,有没有新东西看 CS 论文有没有新概念提出
    xiaoheshang
        53
    xiaoheshang  
       18 小时 40 分钟前
    够用就行,一般说这个落后那个落后的,都是面向简历编程。
    gejun123456
        54
    gejun123456  
       18 小时 36 分钟前
    mybatis 可以试试 intellij 的 MybatisCodeHelperPro 插件,大幅提升 mybatis 开发效率,写 sql 几乎所有地方都有代码提示,还有很多生成代码,代码检测,开发效率不比其他 orm 低
    xiaomushen
        55
    xiaomushen  
       18 小时 12 分钟前
    如果去掉了 MyBatis ,就不落后了
    angryfish
        56
    angryfish  
       18 小时 5 分钟前
    现在的项目用 mybatis plus ,简单 sql 不用写,复杂的查询才需要。完全感觉不到落后。
    chuck1in
        57
    chuck1in  
       17 小时 42 分钟前
    我来啦。
    harryWebb
        58
    harryWebb  
       17 小时 41 分钟前
    天天技术落后啥的,国外一把梭哈干的不比国内少。。。

    工资涨没涨?划水时间太多?

    有那闲工夫多考虑考虑生活,别天天盯着技术落后不落后,落后又能咋滴

    时代车轮肯定会进步的,太正常了
    gowk
        59
    gowk  
       17 小时 32 分钟前
    DDD 的一些概念还是不错的,但是应用门槛比较高,全盘 DDD 就是给自己找不痛快
    Why I don't do Domain Driven Design
    https://news.ycombinator.com/item?id=42539477
    heliotrope
        60
    heliotrope  
       17 小时 28 分钟前
    看过 JOOQ 的 API
    没感觉和 mybatis plus + join 有什么大的区别 不都能 LINQ 式的操作数据库么
    以前 join 不能自关联 什么的 还自己改了代码去实现 现在大部分功能都完善了
    实在复杂的 SQL 还能 XML
    XML 是不优雅 是不好用 问题是有的业务它就是得 XML
    zhouhu
        61
    zhouhu  
       17 小时 16 分钟前
    querydsl + jpa
    querydsl 为啥很久没有维护了😂
    sheeta
        62
    sheeta  
       17 小时 13 分钟前
    感觉 java 的开发者都没有用过 laravel orm 之类的,jpa 这类 orm 简直弱爆了
    chuck1in
        63
    chuck1in  
       17 小时 11 分钟前
    是的,就是很落后哈。
    javak
        64
    javak  
       17 小时 10 分钟前
    我们用的 springboot(kotlin + jdk21) + mybatis 。我挺喜欢写 sql , 完全没有连表查询之类的需求,流量太大,也不能有这些,orm 生成的 sql 不可控,排查问题速度慢,直接 sql 一搜就能搜到。

    有些确实需要连表查询的特殊场景,可以借助 es 来做,或者别的工具。其实把需求理解透了,所有场景都是有解法的。
    qq135449773
        65
    qq135449773  
       17 小时 9 分钟前
    一点个人偏见:

    不妨看看你周围写 Java 的都是什么出身,有没有什么很强的技术背景。

    他们是不是只会玩 Java ,只停留在国内的生态圈里。

    朝这个方向想一下,很多问题就迎刃而解了。
    qq135449773
        66
    qq135449773  
       17 小时 8 分钟前
    MyBatis 作为一个模型映射层是没问题的,他和那种完整的 ORM 是一个问题的两种解法,不存在谁替代谁的问题
    xiaocaiji111
        67
    xiaocaiji111  
       17 小时 2 分钟前
    java 一点儿不落后,看看 JCP 提案,每年新增多少特性,只是国内都是 curd ,各种业务改来改去,很落后。
    mybatis 这种近似原生 sql 的写法挺好的。个人不喜欢封装的花里胡哨的 orm ,简单可控的就是最好的。
    a379395979
        68
    a379395979  
       16 小时 59 分钟前
    这就要提到 PHP 的 Laravel ORM 了,领先 Java 20 年 😂
    chuck1in
        69
    chuck1in  
       16 小时 54 分钟前 via iPhone
    @zsmile jooq 不新,第一个版本 2009 年出的。但是实现思路新,架构底子好。说新是一种形容词。其实用 www.mjga.cc 下一个免费模版体会一下就行了,5 分钟的事情。
    chuck1in
        70
    chuck1in  
       16 小时 52 分钟前 via iPhone
    @xiaocaiji111 如果喜欢写 sql 的话就是 jooq 和 doma 这两个框架可以尝试一下。楼上有模版项目可用。
    ericguo
        71
    ericguo  
       16 小时 50 分钟前
    @qq135449773 说的很在理,你和一个只懂 java 的人谈架构谈选型,没啥意义。
    chuck1in
        72
    chuck1in  
       16 小时 48 分钟前 via iPhone
    @xiaomushen 其实现在有很多新的库可以用(其实也不新了) 还发了配套的模版脚手架项目可以下载,但是很多人已经思维定势了,只要不是 mybatis 的框架都不愿意尝试的, 这种就没办法。
    ZeroDu
        73
    ZeroDu  
       16 小时 46 分钟前   ❤️ 1
    不是落后,是国内从事 java 的很多,很多都是只会单语言,单纯转行来混口饭吧,水平参差不齐
    eastcukt
        74
    eastcukt  
       16 小时 46 分钟前 via Android
    看到那些封装的 JDBC 就头痛,直接 mybatis 写 SQL 不自由吗。用其他语言对接数据库的时候也轻松
    chuck1in
        75
    chuck1in  
       16 小时 44 分钟前 via iPhone
    @diagnostics 终于有认真讨论的了,写的很好赞一个。
    cocong
        76
    cocong  
       16 小时 41 分钟前
    能解决问题就行了,管他是什么技术。
    haython
        77
    haython  
       16 小时 40 分钟前   ❤️ 1
    这么多人说 mybatis 落后,那么到底落后在哪里?怎么才算是先进?
    cp19890714
        78
    cp19890714  
       16 小时 33 分钟前
    业务架构决定组织架构,组织架构决定技术架构。
    编程 是为解决现实问题而生的,不谈业务只谈技术不是搞笑吗?
    国外的业务形态和业务规模能和国内比吗?
    chuck1in
        79
    chuck1in  
       16 小时 30 分钟前 via iPhone
    @kbyyd24 jooq 确实香,对于 jooq 的单元测试的话我用测试容器和 jooq 结合写了一个针对仓储层的全量结合测试,我觉得这样用起来还可以。代码在 www.mjga.cc 的 github 上可以查看。如果项目还要用三层架构的话,这样我觉得也能很好的解决问题。
    luoyou1014
        80
    luoyou1014  
       16 小时 30 分钟前
    @haython 用过 laravel, ruby on rails, ef core, sqlalchemy 就知道什么是先进了,如果没用过,就算描述出来,也只会觉得,mybatis 也能做到啊,只要这样这样这样,就可以了

    纸上得来终觉浅,绝知此事要躬行
    chuck1in
        81
    chuck1in  
       16 小时 28 分钟前 via iPhone
    @qq135449773 哎,其实就是这个问题,也有对这个行业没有太大的热爱的原因吧。
    chuck1in
        82
    chuck1in  
       16 小时 25 分钟前 via iPhone
    @javak kotlin 配合 jooq 体验应该更上一层楼吧?直接用 kt 语法写 sql 像 linq 一样自然。
    luoyou1014
        83
    luoyou1014  
       16 小时 23 分钟前
    @haython 例如给古代的农民讲解收割机怎么先进,农民听了会说,我用镰刀也能割麦子,割完打谷也能得到麦粒,这个收割机也没什么大不了的,没办法做到我做不到的事情
    zsmile
        84
    zsmile  
    OP
       16 小时 18 分钟前
    @diagnostics 站一下老哥

    @xuanbg 是的,硬要说,计算机底层的那些东西几十年都没变化,只是冷饭新炒[\doge],框架那些算是新的落地实践吧。

    @a379395979 Laravel ORM 简单看了下,感觉可能和那增强的差不多,可能在某些复杂场景差距就拉开了吧,我也不好评价什么,毕竟不写 php 。php 是最好的编程语言哈哈哈

    @qq135449773 我也支持这样,以前写 mybatis 和 hibernate 时,就觉得两个的场景不同,就像 mybatis 解决不了的,实在不行,就放到代码层面去解决了。

    @chuck1in 有用过,是挺好用的。只是没在复杂场景下使用过,不好判断两者的差距。
    haython
        85
    haython  
       16 小时 13 分钟前
    @luoyou1014 #81 $flights = App\Models\Flight::where('active', 1)
    ->orderBy('name', 'desc')
    ->take(10)
    ->get();
    我找了一段 laravel 这种代码,这种代码算先进?
    zsmile
        86
    zsmile  
    OP
       16 小时 11 分钟前
    @cp19890714 谈业务,大部分都是 crud 了。都能解决问题,只是好不好解决,怎么解决而已。
    zsmile
        87
    zsmile  
    OP
       16 小时 9 分钟前
    @luoyou1014 我也不懂什么叫先进,因为你说的这几种都没用过,光看代码,也看不出先进的地方,可能还是得深入到某个复杂场景写才知道了。
    joyhub2140
        88
    joyhub2140  
       16 小时 9 分钟前
    哈哈,我单表查询主要还是用 jpa ,多表或者一旦复杂起来的查询无论是什么工具都不顺手,最顺手还是 chatgpt + SQL 。
    zsmile
        89
    zsmile  
    OP
       16 小时 0 分钟前
    @kbyyd24 DDD 感觉还挺香的,但是门槛太高,国内也太少公司用了,都在冲业务,连正常开发都是能跑就行,再讲究统一语言太难了,除非一开始就定了规范制度,还有人做审计重视才行。
    几百行 SQL 真的难受,尤其那些 BI 类的项目,分分钟都是这样的 sql
    kandaakihito
        90
    kandaakihito  
       15 小时 46 分钟前
    羡慕你们这些说不用 mybatis ,甚至有点抵制 mybatis-plus 的。我写的代码都是尽可能能用 mp 。

    为什么呢?因为开发前期甚至是中后期,需求会五花大改,改到天翻地覆,表结构不得不做出巨大改动。这种情况下如果没有用 mp 而是直接写 sql 。。。
    wanniwa
        91
    wanniwa  
       15 小时 38 分钟前
    国外那改 bug 写代码速度,跟乌龟爬一样。java 已经非常完善的体系了, 又没推出什么新的类似 Spring Springboot SpringCloud 系列的变革,已经比前端天天造轮子,一造一个坑好多了。
    haython
        92
    haython  
       15 小时 35 分钟前
    @kandaakihito 感觉那些都是没有被时间吊打的人,也没经历过团队合作
    luoyou1014
        93
    luoyou1014  
       15 小时 33 分钟前
    @haython relation 关联中的 with ,解决 N+1 问题
    withCount, withSum 这样的聚合函数,解决统计问题

    可以看一下文档: https://laravel.net.cn/docs/11.x/eloquent-relationships#counting-related-models
    chuck1in
        94
    chuck1in  
       15 小时 17 分钟前   ❤️ 1
    @kandaakihito 不是,这里的问题是喜欢写 sql 不是只有 mybatis 可以用的。并不是说不用 mybatis 就必须要去用 ORM 。

    上面提到了对于这种 SQL 的库非常完善的一个是 JOOQ ,另一个 DOMA ,都是比 mybatis 优秀很多的库。

    我知道你喜欢 mp 是因为那个 crud 的模式,那种模式叫做 Simple CRUD 。这不是什么神奇的东西,任何一个正常的库都会提供这种支持。

    https://juejin.cn/post/7437023118151450639

    我写过一篇文章来介绍这个概念,可以看看。
    luoyou1014
        95
    luoyou1014  
       15 小时 14 分钟前   ❤️ 1
    @zsmile 不能只学一种语言,一种框架,会导致视野局限,只要了解了 3-5 种之后,很快就能理解哪种方案更优,大部分 orm 框架实现都在往一个同样的方向,建立数据库无关的模型层,通过定义表之间的关系自动解决 N+1 问题,自动嵌入预查询,通过语义化的查询替代 sql 。

    类型做的更好的语言,C#,直接将数据库字段映射到类型上面,重载运算符,直接在语言层面上实现的 sql 语句的转化,python 弱一些,但基本也做到了这一点,php 的类型更弱一点,直接追求灵活性,不追求数据库字段的描述,实现代码数量大幅降低,但缺点就是字段都是文本描述,无法利用编辑器的提示。ruby 则是彻底追求灵活性,直接用元编程将字段映射上方法上面去,可以自动生成方法 find_by_name 。

    评价一个 orm 的好坏,api 设计风格不提,至少要能优雅的解决 N+1 问题,我问做 java 的朋友,很多人连 N+1 问题是什么都不知道……
    chuck1in
        96
    chuck1in  
       15 小时 13 分钟前
    @haython https://juejin.cn/post/7437023118151450639 可以看看这个 blog ,介绍了一个跟 mybatis 不一样的库。像这样的库还有的选的,总体来说只有体会了才能有的比较。
    love2075904
        97
    love2075904  
       14 小时 56 分钟前
    推荐一个 orm 框架 sqltoy ,应该是结合了 jpa 和直接写 sql 的优势吧,而且编写 sql 也比 mp 直观

    https://github.com/sagframe/sagacity-sqltoy
    LpLp
        98
    LpLp  
       14 小时 54 分钟前   ❤️ 2
    javbus 和 javdb 挺好的啊
    iyaozhen
        99
    iyaozhen  
       14 小时 19 分钟前
    DDD 和代码架构关系不大。主要是人员的门槛太高了 而且大公司里也没人用
    qinfengge
        100
    qinfengge  
       13 小时 45 分钟前
    mybatis 确实恶心,尤其是 typehandler ,不过 MP plus 还是可以的,简单的直接写,复杂的在 xml 里面配,算是 2 者结合的不错的了
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1014 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 20:18 · PVG 04:18 · LAX 12:18 · JFK 15:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.