为什么 MyBatis-Plus 不使用 Java Persistence API 的注解? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
echo1937
V2EX    Java

为什么 MyBatis-Plus 不使用 Java Persistence API 的注解?

  •  
  •   echo1937 2020-08-21 08:49:53 +08:00 5177 次点击
    这是一个创建于 1884 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近学习 MyBatis-Plus (看了 2 小时),学到通用 Mapper 这一块时,注意到了实体类的几个注解:
    表名注解 @TableName 、主键注解 @TableId 、非主键字段注解 @TableField
    实际上,这几个注解作用和 JPA 的 @Table 、 @Id 、 @Column 功能基本是一样,
    粗粗翻了一下 MP,诸如此类的注解还很不少。

    按理说,@Table 、 @Id 、 @Column 等注解属于 JPA 规范(现在改名叫 jakarta.persistence-api ),
    一般都放在 javax.persistence 的包路径下,属于 JSR-317,JSR-338 规范的内容,
    很多持久层框架都支持这个规范,遇到 MyBatis-Plus 这样有自己独立注解的,有点惊讶。

    我们的项目一直是 Spring Data JPA 和 MyBatis 一起用,如果要升级成 Spring Data JPA + MyBatis-Plus,
    实体类字段就要标上两套注解,看着很是别扭,组员比较排斥这种用法。

    这种做法在我看来,好处是避免了引入对 JPA 的依赖,还有其他方面的考量吗?
    14 条回复    2020-08-25 09:14:39 +08:00
    rockyou12
        1
    rockyou12  
       2020-08-21 08:59:25 +08:00
    mybatis 本来也不能做类似 @OneToOne 、 @OneToMany 这些级联操作,用自己的 api 能自己把控功能。像你用 Spring Data JPA,很多功能到头来还是要用 hibernate 的包的注解才能实现,所以我觉得差别不大。
    echo1937
        2
    echo1937  
    OP
       2020-08-21 09:12:09 +08:00
    @rockyou12 #1
    MyBatis 是可以通过 associateion 标签来进行级联操作的,我们之前也这么做(主要是查询场景),
    Spring Data JPA 的话,我们已经很少很少使用 Hibernate 包的注解了,甚至很多时候使用 Hibernate 的注解,
    他会提示你使用 JPA 规范的注解,比如以前经常使用 Hibernate 的 @ForeignKey 注解,现在已经 @deprecated
    点进去他提示你:@deprecated Prefer the JPA 2.1 introduced {@link javax.persistence.ForeignKey} instead.
    340244120w
        3
    340244120w  
       2020-08-21 09:21:50 +08:00
    可能作者有 JPA PSTD,恨屋及乌,所以也才选择了 mybatis~
    haochih
        4
    haochih  
       2020-08-21 09:27:58 +08:00
    同比较好奇,按理来说按 JSR 规范统一掉对大家都有好处。不过也说不定人家是想自己定标准呢。/狗头
    handsomezai
        5
    handsomezai  
       2020-08-21 09:49:53 +08:00
    可能是为了中文爱好者使用方便吧,idea 查看源码有中文注释,对我等 CET6 未过的码友甚是友好,mp 的中文注释挺好的
    ChanKc
        6
    ChanKc  
       2020-08-21 10:15:15 +08:00 via Android
    语言障碍的客观存在,国人做的很多东西都会忽略掉已有的一些技术标准和规范(通常这些都是英文写的)
    binbinyouliiii
        7
    binbinyouliiii  
       2020-08-21 10:21:05 +08:00
    有建议提 issue
    pushback
        8
    pushback  
       2020-08-21 10:37:22 +08:00
    @haochih 自己定标准的结局就和目前前端所谓的百花齐放一个下场。
    @echo1937 试试看能不能重写解析器
    rockyou12
        9
    rockyou12  
       2020-08-21 11:30:16 +08:00
    @echo1937 mybatis 级联我确实不知道,但你用 jpa 不太可能定义一种类似 @Type 让所有框架都能兼容。而自定义类型对 orm 框架还是非常重要的,本来规范再好也不可能覆盖所有场景,不管哪个框架总要扩展自己功能。虽然我也觉得 mybatis-plus 是可以兼容 jpa 部分规范的,但人家不想兼容也不是很大问题
    coang
        10
    coang  
       2020-08-21 11:34:13 +08:00
    个人也觉得 mp 自定义注解很怪.. 所以个人选择 tk.mybatis 的辅助框架.. 但是 tk 的框好像没有再更新了.. 功能上也没有 mp 齐全挺可惜的..
    aguesuka
        11
    aguesuka  
       2020-08-21 12:47:44 +08:00 via Android
    jpa 的设计理念和 mybaties-plus 的不一样,mybatis-plus 是 DSL to SQL 和 ResultSet to Bean 。而 jpa 是 DSL to Bean 。

    jsr 规范并不是金规玉律,比如依赖注入标准 jsr-330,spring 虽然实现了这个标准,不过正常的项目应该没人使用吧。而 orm 远比 ioc 复杂,我总有种萝卜坑的感觉。
    mybtis-plus 的代码欠规范也是很大一部分原因。
    让 mybatis-plus 使用 jpa 的 bean 也不是不可以,写一个 addJpaEntityToMybatisPlus 应该不太难
    yinzhili
        12
    yinzhili  
       2020-08-21 13:10:18 +08:00
    楼主可以选用 tk mybatis mapper 。它使用的基本上都是 Java Persistence API 的注解。
    mybtis-plus 这个项目个人觉得优点和缺点都很明显。看得出来它的开发团队想做的事情太多,这对于一个工具包来说不一定是好事。
    Navee
        13
    Navee  
       2020-08-21 13:20:14 +08:00
    这样更有控制权呀~
    一方面控制用户,迁移成本高
    二方面控制自己的需求,自定义注解更灵活
    CantSee
        14
    CantSee  
       2020-08-25 09:14:39 +08:00
    mybatis 一把梭
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     882 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 20:27 PVG 04:27 LAX 13:27 JFK 16:27
    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