Mybatis 到底好在哪?国内大厂也在用?

2020-12-16 15:23:53 +08:00
 ouxch

我司新项目小伙伴们用的 Mybatis,我之前没用过这个,初看他们写的代码和生成的sql,总觉得这玩意儿这么用有些不妥,特来请教下是他们用的方式有问题还是这玩意儿有什么别的黑魔法?

  1. 我看到很多用 mapper 生成的语句都是select *,这严重违反常见规约也严重影响性能吧?
  2. 自定义的mapper xml给我的直观感受还不如格式化后的SQL易读,而且编码效率也不会更高吧?
6184 次点击
所在节点    Java
47 条回复
ouxch
2020-12-16 16:08:50 +08:00
@slyang5 哈哈,特意去百度了下什么是月经帖 。我很少提问,确实之前也没看到这个主题的讨论,提个问就是想讨论求教一下。不好意思了🙏
Jooooooooo
2020-12-16 16:11:55 +08:00
@Hurriance 复杂 sql 的可读性差不是 xml 造成的吧

简单 sql 在 xml 下我看很清晰
sagaxu
2020-12-16 16:14:01 +08:00
@ouxch 有一种痛点,叫别人觉得你痛。mybatis 还没手拼 sql 方便,代码约束好 sql 在什么文件拼,编程语言的表达能力比 XML 强的多。
Oktfolio
2020-12-16 16:21:02 +08:00
不要问我这是在做什么,有没有必要这样做,不是我干的,这里面还有动态查询。
https://sm.ms/image/JEPm2uXckIF9UhK
zjsxwc
2020-12-16 16:24:00 +08:00
都是为了拼 sql:
- Mybatis 用 xml 模板代码里面拼 sql,非常直观一目了然,一定程度上具有一定灵活性方便复用
- Jpa 用 Builder 模式 java 代码面向对象方式拼 sql,一定程度上直观一目了然,非常具有灵活性方便复用


类比 Vue 与 React

都是为了拼 html
- Vue 用私有的 vue 模板代码里面拼 html,非常直观一目了然,一定程度上具有一定灵活性方便复用
- React 用 Builder 模式 javascript 代码面向对象方式拼 html,一定程度上直观一目了然,非常具有灵活性方便复用

比如 React 可以非常简单地做可见就可得的拖拽组件的方式生成运营活动页,而 Vue 很难,因为 vue 模板代码已经写死,不能在运行代码的时候动态修改 vue 模板代码,这类不够灵活复用的问题对于 Mybatis 也一样,xml 模板代码写死后也不能运行时动态修改,当然对于大部分后端项目来说没有前端对于灵活性要求大,甚至大部分前端项目也不需要 React 的灵活性。
liudaolunhuibl
2020-12-16 16:24:48 +08:00
统计相关的需要复杂 sql 的用 mybaties,简单的 CRUD 的就用 jpa
hantsy
2020-12-16 16:24:55 +08:00
mybatis 不如用 Spring JdbcTemplate 方便,如果我真的需要写 SQL 的话。
coderwl
2020-12-16 16:26:16 +08:00
mybatis 在我看来要配和 mybatisHelper 等插件使用,在 xml 中写 SQL 的体验是拼接字符串不能比的,自动提示,字段纠错这些拼接功能都是必备的。如果没有插件,那还不如拼接 SQL
hantsy
2020-12-16 16:31:11 +08:00
日经帖子,Hide
sagaxu
2020-12-16 16:31:33 +08:00
@coderwl 字段提示,语法检查,idea 里手拼 sql 都有哦
yalin
2020-12-16 16:35:36 +08:00
菜刀而已
jitongxi
2020-12-16 16:52:02 +08:00
mybatis plus,方法注解 sql 模板,爽歪歪。。。

5 个以上表关联查询, 试试 jpa ?试试就逝世。
ElmerZhang
2020-12-16 16:57:15 +08:00
我们之前用 Mybatis 是为了直接用 xml 写 SQL,规定所有数据库语句都必须用 xml 来写,这样某个 SQL 出慢查询时方便定位到底是哪里用到的。
totoro52
2020-12-16 17:04:51 +08:00
不要再去纠结 mybatis 和 jpa 了 不结合业务情况来讨论技术的完全是耍流氓
coderwl
2020-12-16 17:11:47 +08:00
@sagaxu 稍微复杂点,多几个逻辑判断就提示不出来了
securityCoding
2020-12-16 17:13:59 +08:00
@jitongxi jpa 多表条件查询确实难用 ,好在业务中规定只能单表查询 , 5 个表以上得去拜访下数据组大佬了
Jrue0011
2020-12-16 17:31:39 +08:00
Mybatis 适合比如需要动态 SQL 复用( include 、bind )、复杂结果映射( discriminator 、collection )之类的场景。

至于普通的动态 SQL 倒不算特别大优势,因为其他 ORM 框架也基本能做到。

之前因为某个需要稍微去了解了下 Camunda 、Activiti 工作流引擎,然后发现他们操作数据库也是用的 Mybatis,就去看了下他们是怎么用的,好家伙那里面各种标签用的飞起。
SuperXRay
2020-12-16 18:21:56 +08:00
@ouxch #18
这个也是有的,
随便搜一下“mybatis-plus select 部分字段”,不需要写 xml,也不算麻烦
hangszhang
2020-12-17 00:28:35 +08:00
日经贴, 天天讨论, 服了
beginor
2020-12-17 08:30:28 +08:00
.Net 平台上基于 linq 的 ORM 兴起之后, 像 mybatis 这种半自动的就没落了, 当年 iBATIS.Net 也是能扛起半边天的。

Java 平台却一直没有出现好用的 linq 的 ORM 框架, 到底是什么原因呢? 期待 Java 平台上的基于 linq 的 ORM 框架, 看到时候还有谁说 mybatis 香!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736035

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX