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

Java 社区除了 mybatis 之外,有没有类似.net 下的 Dapper?

  •  
  •   bbsfoo · 2019-08-11 22:37:26 +08:00 · 5651 次点击
    这是一个创建于 1691 天前的主题,其中的信息可能已经有所发展或是发生改变。
    先说一下为什么不用 mybatis,主要是觉得太复杂,太累赘,特别是 SQL 语句的拼接。
    平时项目规模很小,最多十来个表就搞定了,ASP.NET MVC,数据库也很单一,一律为 Oracle,Dapper+SQL 简单粗暴高效。

    现在想转到 Spring Boot,但这个 ORM 的问题卡住了,大家都说好的 mybatis 太难用,特来请教,有没有类似 Dapper 的工具?
    39 条回复    2019-08-13 14:42:20 +08:00
    luozic
        1
    luozic  
       2019-08-11 22:45:51 +08:00 via iPhone   ❤️ 1
    jooq
    Takamine
        2
    Takamine  
       2019-08-11 23:02:12 +08:00
    如果业务不是很复杂,数据库操作 leader 没什么太大的约束的话。
    我觉得就用 JPA 加 Mybatis 的 example 直接用 mybatis-generator 生成。
    Takamine
        3
    Takamine  
       2019-08-11 23:19:41 +08:00
    @luozic 好东西阿,感觉看到了 PHP 框架 ORM 的影子。:doge:
    gejun123456
        4
    gejun123456  
       2019-08-12 00:00:03 +08:00 via iPhone
    没看懂 mybatis 复杂在哪里 sql 语句的拼接其他工具也要写吧 用 Intellij 也可以一键生成
    90d0n
        5
    90d0n  
       2019-08-12 00:19:11 +08:00
    jpa 或者 mybatis-plus
    charlie21
        6
    charlie21  
       2019-08-12 00:26:57 +08:00
    Dapper 看了一眼,简直跟 php 的 mysqli_query(sql) 那套玩意 一样嘛,很爽 。请问如果用 .NET 技术栈 开发网站,用 Dapper 作为 mysql conn 还需要什么呢?服务器端渲染页面,能有什么简单点儿的 ( 最好能像 php 一样混写,我不太清楚哪个是又简单又主流的 ) 吗?服务器端渲染,我用管了 简单粗暴的 PHP 了,现在 Razor 我都嫌麻烦 ...
    charlie21
        7
    charlie21  
       2019-08-12 00:31:29 +08:00
    这篇文章里说的 服务器端渲染,“把一个网页当作一个 app ( HTTP GET 拿到的不是渲染后的网页,而是一个由 html 和 Javascript 组成的 app ) ” ,网页已经复杂到这个程度了吗? ( 至少大部分网页都是很简单的吧 ) 真的是那么回事吗
    https://www.zhihu.com/question/59578433/answer/332545815
    gowk
        8
    gowk  
       2019-08-12 08:37:12 +08:00 via Android
    和 Dapper 最相似的就是 jdbcTemplate,当然它没 Dapper 强大,但小项目足够用了,就算大项目代码组织好的话也不在话下。不喜欢 Mybatis,jooq 更是垃圾,在 sql 层之上又套了一层东西,让原本用 sql 就可以解决的问题变得更加复杂,做后端的把基本的 sql 写好就行了,别去搞那些花里胡哨的东西,不值得。大道至简,多学学数据结构,算法比这都强
    yizmaoaa
        9
    yizmaoaa  
       2019-08-12 09:55:07 +08:00
    ebean
    nnnToTnnn
        10
    nnnToTnnn  
       2019-08-12 10:28:27 +08:00
    jpa 或者 querydsl, 个人觉得 hql 比较好用,建议 jpa
    nnnToTnnn
        11
    nnnToTnnn  
       2019-08-12 10:31:11 +08:00
    或者使用我开源的框架? 当前作为一个新手写的 sql 库,不知道效果怎么样,没有在大项目验证过,要不当一会小白?

    https://github.com/a854363956/t-sql-common
    nnnToTnnn
        12
    nnnToTnnn  
       2019-08-12 10:31:55 +08:00
    简单的应用我觉得应该是够了
    Caballarii
        13
    Caballarii  
       2019-08-12 10:49:15 +08:00
    你觉得简单粗暴高效是因为你还没碰到过数据量大的查询,看不到 sql 的情况下优化能恶心死你
    zgcwkj
        14
    zgcwkj  
       2019-08-12 10:57:40 +08:00
    mybatis plus
    Caballarii
        15
    Caballarii  
       2019-08-12 11:01:32 +08:00
    @Caballarii 刚看了一下 dapper,感觉没多大区别啊,还以为是 hibernate 那种呢
    sun1991
        17
    sun1991  
       2019-08-12 12:09:48 +08:00
    JDBI, 我认为最像 Dapper.
    zmlu
        18
    zmlu  
       2019-08-12 12:16:23 +08:00
    jfinal 的 db
    mmdsun
        19
    mmdsun  
       2019-08-12 12:30:06 +08:00 via Android
    mybatis-plus 一键生成
    lancelock
        20
    lancelock  
       2019-08-12 13:48:36 +08:00
    .net core 不也挺好的吗,干嘛转 java
    Rwing
        21
    Rwing  
       2019-08-12 16:04:59 +08:00
    从软件工程的角度来讲,Dapper 和 mybatis 这类 sql helper 都是不利于可维护性的。所以,最好找个强类型的纯粹的 orm,:)
    abcbuzhiming
        22
    abcbuzhiming  
       2019-08-12 16:16:44 +08:00
    @Rwing ORM 可维护?我这么说吧,想用对象模型取代关系模型从根子上就是错的,关系模型要是能被对象模型描述的话,那现在流行的就该是对象数据库而不是关系数据库。只要你的系统里有关系数据库,你就得面对 sql,或者其实你压根就不需要关系数据库,不如拿掉直接上 nosql。无论怎样,
    chenuu
        23
    chenuu  
       2019-08-12 16:24:36 +08:00
    没有用过 Dapper,但是真的没人用 jpa/hibernate 了吗?
    Rwing
        24
    Rwing  
       2019-08-12 16:27:07 +08:00
    @abcbuzhiming 是的,我也认同你说的对象模型和关系模型是不能完全匹配的。但是,基于这个现状,我们只能期望从 orm 的层面解决这个问题。纯 sql 显然不是更优的解决方案。
    Mmiracle110
        25
    Mmiracle110  
       2019-08-12 16:29:59 +08:00
    不想写 SQL 的话,可以考虑 data-jpa
    qq1004108488
        26
    qq1004108488  
       2019-08-12 16:34:06 +08:00
    mybatis 难用?????
    第一次听到说 mybatis 难用的,随便去慕课网找个免费视频就能入门了,上手不用 2 小时。
    简单的直接用 MybatisPlus 调函数调用,复杂的直接写 sql 或者 xml,不知道哪里说的难用。
    abcbuzhiming
        27
    abcbuzhiming  
       2019-08-12 17:11:56 +08:00
    @qq1004108488 虽然我一直推崇直接面对 sql,并且也在 java 生态圈里待了很久,但是有人如果说 mybatis 难用,我是赞成的,mybatis 真的是一点都不好用,只要去看看别家同样是 sql 优先的库你都不会觉得 mybatis 好用,而且我认为用 xml 保存 sql 是个败笔。太容易出错了,程序员不得不消耗更多心智负担来解决 xml 中的 sql 出错问题。
    q397064399
        28
    q397064399  
       2019-08-12 17:28:34 +08:00
    @abcbuzhiming #26
    主要为了这个诉求再发明一个 DSL 不值得

    1. ORM 封装过度 JPA + QueryDSL 这种是最吼的,封装非常彻底,适合 DDD 复杂的领域建模
    基本上不用写 SQL,出了性能问题最难排查, 有一个对应的 HQL 可以裸写,但是这个技术非常小众,用的人少


    2.Mybatis 裸写党 + 插件增强党,这种最原始,性能全掌控在程序员手里,
    但是效率低,维护起来非常麻烦,国内由于阿里系最早就是 Mybatis 搞起来的,所以大多都是这种原始方式,
    很多公司是禁用 Mybatis 的级联功能的,一对多 多对多 全都是代码维护的,工作量极大,代码量小的时候还可以
    代码量大的时候,有很大一部分代码就是在组装数据结构。


    总而言之没有什么银弹,还是要根据你的项目实际来,如果是业务非常复杂,需要领域建模,JPA + QueryDSL 目前是首选,如果业务非常简单,那就是怎么快,怎么来,反正后期维护基本上不是首要考虑的事情,在国内基本上这就是实际情况。
    qq1004108488
        29
    qq1004108488  
       2019-08-12 17:31:00 +08:00
    @abcbuzhiming 你说的别家是指同语言还是不同语言?同语言来说,除了 jpa 就是 mybatis,我不认为在一个持续迭代的项目中,jpa 会比 mybatis 简单,单单多表间的依赖关系,在设计实体类的时候,就已经足够麻烦了。
    如果不同语言的话,抱歉,我没用过其他语言操作数据库。不提供意见,而且也没有可比性。
    至于 xml 保存 sql 容易出错问题,我只能说,基本没遇到过,因为 idea 有对应的提醒,而且有插件也可以直接根据数据库表生产 xml 文件,只是表关联的关系在 xml 实体类与数据库字段需要自己再添加一下对应关系,这个在官方文档也有很详细的说明和例子。
    其实最不需要消耗心智的数据库交互,那肯定就是传统的 jdbc 直接写 sql 字符串了,而且这个 mybatis 同样也支持不用 xml,直接通过注解的方式直接写 sql。但是说真,这个出错才是最难排查的。而且如果涉及到动态判空,会比 xml 更加麻烦。
    当然,跨语言如果有超级强超好用的数据库操作库,是可以用服务的方式,专门设计一个数据库交互的服务,java 服务用 RPC 或者 HTTP 的方式调用该其他语言数据库交互服务,这个在大公司大型项目中,并不少见。毕竟,这种大型项目,一般开发者是不会甚至没权限直接操作数据库的。
    qq1004108488
        30
    qq1004108488  
       2019-08-12 17:35:03 +08:00
    @q397064399 其实在 mybatisPlus3.0 里面,也是可以不用写 sql 或者 xml 了,直接用 lambda 的方式查数据库。现在很多人其实还是在用原始的眼光看待 mybatis。Mybatis 已经升级换代很多了。
    fuckshit
        31
    fuckshit  
       2019-08-12 17:53:19 +08:00
    spring-jdbc 啊。
    q397064399
        32
    q397064399  
       2019-08-12 18:09:52 +08:00
    @qq1004108488 #29 国内的情况还是重业务,代码质量跟技术升级 都是次要的,没用上新的很正常,mybatis-plus 这个插件 估计也就 2 年不到的历史吧,我司的项目 最早的项目都是 7 年前的玩意了,想一下改变太难。
    gowk
        33
    gowk  
       2019-08-12 20:21:23 +08:00
    为什么我劝你放弃 mybatis: https://zhuanlan.zhihu.com/p/45044649
    我同意文章中的大部分观点
    zazalu
        34
    zazalu  
       2019-08-13 01:37:00 +08:00
    emmmm,还好吧? 我用过 hibernate 和 mybatis,准备试试 mybatis-plus. mybatis 我在使用过程中感觉比较恶心的是二级缓存的 namespace 问题。。。 其余配置都已经有了成熟的自动生成插件或者说逆向工程,感觉已经不是特别复杂了。
    yiyi11
        35
    yiyi11  
       2019-08-13 09:52:42 +08:00 via Android
    别争了,不用 mybatis 的人都是幸福的,用 mybatis 的人都是不幸的。不幸不是因为用了 mybatis,而是 mybatis 更适合。最终结论甚至是换公司。
    有用的建议:mybatis 推荐 2 种方案,1.通用 mapper+pagehelper,2.mybatis-plus。个人喜欢第一种,因为 pagehelper 的分页跟 mapper 方法逻辑上解耦,mybatis-plus 的分页方案跟 mapper 方法耦合。
    guojxx
        36
    guojxx  
       2019-08-13 11:42:40 +08:00
    nutz-dao
    StarkWhite
        37
    StarkWhite  
       2019-08-13 11:55:24 +08:00
    关键词 ORM,嗯,某爬虫可能要来了 /狗头
    qq1004108488
        38
    qq1004108488  
       2019-08-13 14:36:27 +08:00
    @gowk 里面的观点,大部分是主观意识加挑刺的,同样的逻辑,放在其他框架一样能挑出一大堆问题,你看点赞数和评论就知道了。我随便挑几点:

    6.调试问题/代码重构:mybatis 可以打印执行 sql 日志,直接复制日志即可打开 sql 命令行调试,至于重构,难道其他 dao 框架重构能轻松,这个只能说看业务。

    7.手写的 SQL 未必比 hibernate 生成的 SQL 效率高~:未必是什么意思?起码我手写能看出来写的规不规范吧,效率问题更多的是数据库设计问题,执行上的效率,这个只能看每个人对于数据库的理解了。

    8.缓存问题~:老实说,我做 java 开发几年了,没遇到过几个需要调缓存的,可能我公司小,项目垃圾吧。

    9.分表分库/审计/全文索引问题~:这个是数据库设计问题,拿一个出了 N 年的框架来 PK 一个新生儿,适合?解决方案是要经过迭代经验的。

    10.糟糕的实现:不知道他说什么?我的确看到过有说第一代 mybatis 的代码质量比较差,但是看不出什么糟糕的实现。

    11.关联查询:关联查询的场景本来就不多,而且基本使用任何框架,都是需要特殊处理的,如果复制场景不需要特殊处理,程序员的价值在哪里?

    12。满世界找文件:这个只能说代码分层设计问题,分好职责包和类,有那么麻烦?也可以说是 IDE 问题,用 idea 可以直接插件关联接口类和 xml,直接跳转。真没试过满世界找文件的情况,只能说这个作者根本就是找茬。

    1-5 我就懒得说了,打字好累。

    现在很多网上的文章,都是站台文章,参考 angular 和 vue 两个团队的争吵。之前还有人说 lombok 不建议用的,现在不都是真香。使不使用一个框架,不是看他的代码有多么优美,不是看他效率有多么高,而是看上手难度和使用成本。很明显大部分公司,在用 mybatis 上的使用成本是很低的。只需要设计好数据库表,实体类和 xml 直接生成,如果使用 tk 或者 mybatisplus 的话,直接 service 都给你生成好了,填充业务逻辑就可以了。这难道不是一个好的优点?至于说追求超级性能的,那还用什么传统数据库,直接大数据那套不是更强。
    qq1004108488
        39
    qq1004108488  
       2019-08-13 14:42:20 +08:00
    @q397064399 这就是多个角度问题,我一般会研究主流新的框架,看下能不能在公司或者自己的组里面推广用于下个项目,公司用不用,我不在意,反正作为码农就是完成公司任务就行,但是起码需要对新知识有了解。
    不然就会像上周那个帖子一样,说新员工鄙视他用 SpringMvc 还觉得自己不了解 Spirngboot 而感到合理。
    新的技术,如果比旧的上手难度高很多,性能差非常多,那肯定是不可能推广成功到我们大伙知道的,能让大伙知道并使用肯定是有其优点的。
    至少 mybatis 的优点,目前越来越大于缺点了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5526 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 06:05 · PVG 14:05 · LAX 23:05 · JFK 02:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.