• 请不要在回答技术问题时复制粘贴 AI 生成的内容
tsingke
V2EX  ›  程序员

javaer 们, JPA 和 mybatis,喜欢用哪一个

  •  1
     
  •   tsingke · Sep 25, 2020 · 14058 views
    This topic created in 2230 days ago, the information mentioned may be changed or developed.

    mybatis 新出了 https://github.com/mybatis/mybatis-dynamic-sql 简单查询用起来很爽。

    92 replies  •  2020-09-27 18:39:16 +08:00
    onikage
    onikage
    Sep 25, 2020
    1
    jpa+1, 手上项目对数据库要求不高, 还有 h2 的, 毕竟省事.
    jwk345
    jwk345
    Sep 25, 2020 via iPhone
    2
    简单查询 example 搞定
    EscYezi
    EscYezi
    Sep 25, 2020 via iPhone
    3
    个人喜欢用 JPA,工作用 Mybatis
    mango88
    mango88
    Sep 25, 2020
    4
    JPA + 1
    KarlChen2015
    KarlChen2015
    Sep 25, 2020
    5
    业务越大 Mybatis 越好用
    wangyanrui
    wangyanrui
    Sep 25, 2020 via Android
    6
    jpa
    wangyanrui
    wangyanrui
    Sep 25, 2020 via Android❤️1
    7
    不对,应该说是 JPA 加 QueryDSL
    实话实说,我个人讨厌 mybatis😂😂楼下大神们莫要喷我,个人看法
    sagaxu
    sagaxu
    Sep 25, 2020 via Android❤️5
    8
    mybatis 恶臭,只剩中国人在用了
    HENQIGUAI
    HENQIGUAI
    Sep 25, 2020
    9
    打算试试 jooq
    chendy
    chendy
    Sep 25, 2020
    10
    jpa,项目里没有太复杂的查询
    zjsxwc
    zjsxwc
    Sep 25, 2020
    11
    jpa 越 java 越好
    BreadBig
    BreadBig
    Sep 25, 2020
    12
    JPA+1,维护过其他人的 mybatis 项目,业务也挺简单的,但逻辑大部分都放在了 sql 里,简单的功能一下复杂得一匹( sql 烂一定是我的错)
    gowk
    gowk
    Sep 25, 2020 via Android❤️4
    13
    只用 jdbctemplate 的同学有没有?
    Asuka0947
    Asuka0947
    Sep 25, 2020
    14
    JPA
    Yogpre
    Yogpre
    Sep 25, 2020
    15
    jpa+mybatis,简单查询 jpa,复杂查询统计 mybatis
    wjpdev
    wjpdev
    Sep 25, 2020
    16
    JPA+1 , 代码量工作量最少
    NeverNot
    NeverNot
    Sep 25, 2020❤️1
    17
    喜欢用 mybatis,集成 mybatis plus,舒服的一批,想写 sql 就写 sql,不想写就 warpper 查询,也很方便,但是 jpa 就不行了,遇到联表查询 就残废
    aegon466
    aegon466
    Sep 25, 2020
    18
    mybatis-plus 香的一批 单表和 jpa 一样 复杂直接写 sql 奴我直言 其他都是辣鸡
    a719031256
    a719031256
    Sep 25, 2020
    19
    工作用 mybatis,我个人来说更喜欢 jpa,mybatis 的 xml 简直让人发疯
    tinyuu
    tinyuu
    Sep 25, 2020
    20
    pagehelper + Mapper 更好
    wiix
    wiix
    Sep 25, 2020
    21
    jpa + jdbctemplate,mybatis 就是辣鸡
    overthemoon
    overthemoon
    Sep 25, 2020❤️1
    22
    两个一起用
    AJQA
    AJQA
    Sep 25, 2020
    23
    一张列表页面 有很多条件需要查询 java 怎么办 不使用类似 elasticsearch
    是不是一堆
    if( key exists request) query.and(Model.key= value)
    NotFoundEgg
    NotFoundEgg
    Sep 25, 2020❤️2
    24
    mybatis+1
    单表操作直接 mybatis plus
    多表查询自己写 xml
    xurunfei
    xurunfei
    Sep 25, 2020
    25
    mybatis + mybatis plus ,公司用了 jpa,然后遇到统计是真的难受,mybatis plus 使用上感觉和 jpa 差不多了,还是喜欢 mybatis
    asmoker
    asmoker
    Sep 25, 2020
    26
    我选择用 SQLAlchemy ...(走错片场了
    coang
    coang
    Sep 25, 2020
    27
    mybatis..
    @tinyuu 这两个没有更新了 准备转 mybatis plus
    asmoker
    asmoker
    Sep 25, 2020
    28
    JPA 联表确实是别扭的一 P
    ymz
    ymz
    Sep 25, 2020
    29
    简单 jpa,复杂 mybatis
    bitmin
    bitmin
    Sep 25, 2020
    30
    JPA 简单查询用方法名查, 联表或者复杂查询直接 @Query 手写 sql, 返回复杂对象的时候写个 interface

    感觉 mybatis 麻烦多了

    看了一下同事使用 mybatis pagehelper 的方式, 自己接受不了

    喜欢手写 sql, 不管啥语言框架都一样的使用方式
    laoyur
    laoyur
    Sep 25, 2020
    31
    jooq:我这么没有排面的啊?
    astkaasa
    astkaasa
    Sep 25, 2020
    32
    spring data jdbc
    jimrok
    jimrok
    Sep 25, 2020
    33
    JPA 没有用过,不过 mybatis 这东西确实头疼。
    avalon0624
    avalon0624
    Sep 25, 2020
    34
    JPA
    BBCCBB
    BBCCBB
    Sep 25, 2020
    35
    mybatis + mybatis-plus 这一类东西, 不知道楼上说 mybatis 有问题是有啥问题?

    jpa 多表查询难用..
    FanError
    FanError
    Sep 25, 2020
    36
    JdbcTemplate 加模仿 ActiveRecord 写了个简单的 ORM 。

    简单 SQL 用 ActiveRecord ORM 一波,复杂的用 JdbcTemplate 手写 SQL
    letitbesqzr
    letitbesqzr
    Sep 25, 2020
    37
    @KarlChen2015 #5

    我觉得相反,应该是性能要求越高业务约简单的场景用 mybatis 更好。 那种复杂业务动不动几千上万张表的系统,mybatis 关联都要写吐
    vayci
    vayci
    Sep 25, 2020
    38
    简单小项目 JPA,大点的 mybatis
    Yechs
    Yechs
    Sep 25, 2020
    39
    mybatis 一改表结构就真的恶心了
    TheWidowMaker
    TheWidowMaker
    Sep 25, 2020 via Android
    40
    ?通常都是用 jpa 把表建了就删掉了…然后开始用 mybatis
    zlllllei
    zlllllei
    Sep 25, 2020
    41
    @Yechs 用 mybatis plus,增加属性很方便呀,简单对象,只用改实体。至于其他需要手写 sql 的地方,你用其他方式也肯定要改 sql 语句的。
    sagaxu
    sagaxu
    Sep 25, 2020 via Android
    42
    @BBCCBB XML 拼 SQL 体验太差了,相比写代码而言

    没有少写代码,SQL 还是那个长度
    没有提高性能,增加了解释 XML 的开销
    代码和逻辑分离,不利于读旧代码
    降低了灵活性,某些场景下还很麻烦

    现在 mybatis 有点几年前 ssh 那味儿
    Cbdy
    Cbdy
    Sep 25, 2020
    43
    为什么不直接写 SQL ?
    yuxing1171
    yuxing1171
    Sep 25, 2020
    44
    这没有喜欢不喜欢吧,看项目实际情况决定,没有哪个更好,只有更合适。
    20150517
    20150517
    Sep 25, 2020
    45
    jooq
    TelltoLies
    TelltoLies
    Sep 25, 2020
    46
    手写 sql 不香么?
    zhaoyuting
    zhaoyuting
    Sep 25, 2020
    47
    同以上 JdbcTemplate
    orm
    orm
    Sep 25, 2020 via Android
    48
    JPA
    zhady009
    zhady009
    Sep 25, 2020
    49
    @sagaxu 一般的条件 IDEA 插件自动生成 只有很特殊的才要写
    hankli
    hankli
    Sep 25, 2020
    50
    能用 JPA 为啥要用 mybatis
    sagaxu
    sagaxu
    Sep 25, 2020 via Android
    51
    @zhady009 idea 插件能自动生成的,JPA 根据接口的方法签名自动合成 SQL 了
    BBCCBB
    BBCCBB
    Sep 25, 2020
    52
    @sagaxu 但写代码拼 sql 更麻烦呀. 像 mybatis 的 where, set 等标签能解决里面一个条件都不成立却多了一个 where, set 语句这种问题. 拼代码有点麻烦.
    像 mybatis-plus 这种解决了大部分场景, 剩下的就是用 xml 或者注解写 sql 搞定.
    sagaxu
    sagaxu
    Sep 25, 2020 via Android
    53
    @BBCCBB 代码手拼也可以封装几个 helper 方法啊,有了 lambda 之后封装简便了很多
    lxk11153
    lxk11153
    Sep 25, 2020
    54
    @FanError #36 ActiveRecord 是啥?
    lau52y
    lau52y
    Sep 25, 2020 via iPhone
    55
    @gowk 😄+1
    FanError
    FanError
    Sep 25, 2020
    56
    @lxk11153 https://javalite.io/activejdbc N 年前 ROR 里的概念
    echo1937
    echo1937
    Sep 25, 2020
    57
    喜欢 JPA > mybatis > mybatis-plus
    rockyou12
    rockyou12
    Sep 25, 2020
    58
    JPA 加 QueryDSL
    hhyyd
    hhyyd
    Sep 25, 2020
    59
    jpa+querydsl
    yema50
    yema50
    Sep 26, 2020 via iPhone
    60
    @NeverNot 貌似 jpa 也可以直接写 sql 啊 ,@Query 里写联表查询
    tohuer00
    tohuer00
    Sep 26, 2020
    61
    我在想是不是现在的小朋友都不会写 sql 了 所以 jpa 这种东西才会这么热
    jeffh
    jeffh
    Sep 26, 2020
    62
    mybatis plus
    tydl
    tydl
    Sep 26, 2020
    63
    PHP 是最好的语言~~~~~~~
    tsingke
    tsingke
    OP
    Sep 26, 2020 via iPhone
    64
    @tydl 兄弟 时代变了 php 要黄了
    yinzhili
    yinzhili
    Sep 26, 2020
    65
    一开始功能简单的时候 jpa 可以节省开发时间,但我觉得如果项目规模慢慢扩大,对于复杂的报表需求又不得不用 mybatis 。所以为什么不干脆一开始就选用 mybatis 呢?
    xuanbg
    xuanbg
    Sep 26, 2020
    66
    @sagaxu
    @a719031256

    现在都是这种注解写法吧……

    @Results({@Result(property = "detail", column = "detail", javaType = Object.class, typeHandler = JsonTypeHandler.class)})
    @Select("<script>select a.id, e.`name` as entity, a.type, a.`code`, a.`name`, a.balance, a.detail, a.is_invalid " +
    "from iaf_account a join iab_entity e on e.id = a.entity_id where e.tenant_id = #{tenantId} " +
    "<if test = 'key != null'>and (type = #{type} or `code` = #{key} or name like concat('%',#{key},'%')) </if>" +
    "order by created_time desc</script>")
    List<AccountDto> getAccounts(QueryDto dto);

    压根不需要 xml
    anguiao
    anguiao
    Sep 26, 2020 via Android
    67
    @xuanbg 对 mybatis 来说,没觉得注解和 xml 比起来有什么优势。
    KV2
    KV2
    Sep 26, 2020
    68
    jpa+jdbcTemplate
    rb6221
    rb6221
    Sep 26, 2020 via iPhone
    69
    我写过一个项目挺复杂,用的 jdbc
    securityCoding
    securityCoding
    Sep 26, 2020
    70
    jpa
    18258226728
    18258226728
    Sep 26, 2020
    71
    mybatis-plus,啥也不想,小项目也用这个,总是会出现 sql jpa 搞不了
    MarioLuo
    MarioLuo
    Sep 26, 2020 via Android
    72
    项目用的 spring-data-mongo, 其中 CRUD 方法、分页排序、方法名的查询、注解条件甚是方便、SpringData 系列互通,人生苦短何不一试。
    xe2vherd
    xe2vherd
    Sep 26, 2020
    73
    我选择 SQlAchemey...
    MarioLuo
    MarioLuo
    Sep 26, 2020 via Android
    74
    @rockyou12 query dsl 代码生成每次都需要手动触发 compile, 这个怎么弄?而且为了少数查询需求生成这么多代码感觉有点重
    rockyou12
    rockyou12
    Sep 26, 2020
    75
    @MarioLuo 我写的时候反正没有需要 compile 的问题,可能因为我项目都是用的 gradle……
    wangyanrui
    wangyanrui
    Sep 26, 2020 via Android
    76
    简而言之,面相对象和面相过程的 PK
    简单业务逻辑,写到 service 中,选哪个无所谓
    复杂业务逻辑,想要 ddd,选 jpa🙄
    chenhui7373
    chenhui7373
    Sep 26, 2020
    77
    @18258226728 印象可以这样?@Query(native=true,value="SQL_PLACEHOLDER")
    chenhui7373
    chenhui7373
    Sep 26, 2020
    78
    r2dbc 貌似 jpa 友好
    yalin
    yalin
    Sep 26, 2020
    79
    jpa
    yalin
    yalin
    Sep 26, 2020
    80
    微服务的 cqrs 架构
    KevinBlandy
    KevinBlandy
    Sep 26, 2020
    81
    Jpa + QueryDsl (一年多没用过 mybatis 了)
    ourslay
    ourslay
    Sep 26, 2020 via iPhone
    82
    spring data jdbc + mybatis 这个应该是最佳组合了吧
    ajaxpost
    ajaxpost
    Sep 26, 2020 via iPhone
    83
    QueryDSL 会受到 Entity 里的 OneToOne,OneToMany 封注解得影响,有时候 left join 变 cross join,大家咋解决的?不写导航属性么
    fpure
    fpure
    Sep 27, 2020
    84
    我宁可用 spring jdbctemplate 也不想用 jpa,项目中用过要多难受有多难受。jpa 擅长的自然好写,jpa 不擅长的实现起来就想撞墙,所以对我而言 jpa 并不是一个可以放心全部托付的框架。现在许多 mybatis 二次开发的框架单表也不用写 sql 了,同时具有 jpa 的简单和 mybatis 的灵活,不香吗?
    fpure
    fpure
    Sep 27, 2020
    85
    话说楼主提到的这个 mybatis-dynamic-sql 有点意思,有 mybatis-plus 等库的感觉了,而且是官方出的,关注了
    fpure
    fpure
    Sep 27, 2020
    86
    不知道为什么我居然没有关注过官方的这个库
    gitdoit
    gitdoit
    Sep 27, 2020
    87
    都用过,还是觉得 mybatis plus 好用,单表操作用 AR 模式,多表直接写 xml
    zppass
    zppass
    Sep 27, 2020
    88
    咱自有国情,mybatis 可以自己定制 SQL 业务逻辑,只不过太多逻辑冗余进去,特别复杂特别久远 SQL 代码都不敢碰,改一点就缺点东西多点东西出来,甚至部分条件失效。
    JPA 没怎么用过,听过名字,在想会不会是那种 hibernate 的继承者的啥的,也不好说啥。
    magen
    magen
    Sep 27, 2020
    89
    我选择在 SpringBoot 里引入 JFinal 的 Record 模块,Db.use("A 库").find("select * from XX where DATA_DT=?",'20200926');

    做报表时,这个写法太舒服了
    pkupyx
    pkupyx
    Sep 27, 2020
    90
    多数 hibernate,少数 mybatis-plus
    喜欢继承 mp 的 interface,简单的用 baseMapper 的查询,复杂的注解写 SQL 。整体比 h 省心且直观。
    不喜欢 mp 的 @Select 语句无法变色高亮检查,code review 会坑。

    另外 mp generate 的 entity 结构竟然不是标准 JPA 规范的,很烦。
    751762476
    751762476
    Sep 27, 2020
    91
    ktorm 了解下
    sayhi
    sayhi
    Sep 27, 2020 via Android
    92
    jpa querydsl
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4216 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 185ms · UTC 01:06 · PVG 09:06 · LAX 17:06 · JFK 20:06
    ♥ Do have faith in what you're doing.