V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
coolair
V2EX  ›  问与答

Sprint Boot 一定要写 SQL 吗?

  •  
  •   coolair · 2022-04-02 10:16:35 +08:00 · 3773 次点击
    这是一个创建于 727 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看了本书,无论使用 XML 模式还是注解模式,都要自己写 SQL ,既然要写 SQL 那 ORM 的意义何在?

    另外,你们一般使用哪种模式?
    31 条回复    2022-04-03 18:41:55 +08:00
    bootvue
        1
    bootvue  
       2022-04-02 10:21:04 +08:00
    mybatis & plus spring data 混合双打
    lawler
        2
    lawler  
       2022-04-02 10:22:37 +08:00
    JPA
    oneisall8955
        3
    oneisall8955  
       2022-04-02 10:25:12 +08:00 via Android
    mybatis plus 单表查询不需要
    aptupdate
        4
    aptupdate  
       2022-04-02 10:25:49 +08:00 via iPhone
    啊? orm 的意义也不是为了解决写不写 sql 啊。。。
    操作数据库就避免不了写 sql ,只是直接写在 xml 里或者类似于 mybatisplus 这种工具帮你转换的区别。
    dengkj
        5
    dengkj  
       2022-04-02 10:54:51 +08:00
    MyBatis-Plus 好用吗
    hidemyself
        6
    hidemyself  
       2022-04-02 11:00:00 +08:00
    ORM 要解决的不是写不写 SQL 的问题。

    有人喜欢 SQL 和代码分离,就 MyBatis ,XML 那一套了。
    还有就 Hibernate/JPA 那一套了。
    WebKit
        7
    WebKit  
       2022-04-02 11:01:37 +08:00 via Android
    看你理解的写 sql 是自己手写还是不出现 sql 代码。jpa 可以通过插件,基本不用手写
    wudaye
        8
    wudaye  
       2022-04-02 11:09:19 +08:00
    刚学吗,JPA 没听过?
    potatowish
        9
    potatowish  
       2022-04-02 11:13:13 +08:00 via iPhone
    简单项目 jpa ,复杂点用 mybatis 、mybatis plus
    hay313955795
        10
    hay313955795  
       2022-04-02 11:25:06 +08:00
    jooq 。一点 sql 都没有吧...
    cheng6563
        11
    cheng6563  
       2022-04-02 11:28:52 +08:00
    ORM 本来就凑合 M 下就行了。完全的 ORM 难用的要死。
    coolair
        12
    coolair  
    OP
       2022-04-02 11:28:58 +08:00
    @wudaye 刚学,哈哈。感觉为了查询个东西,竟然要写 entity 、mapper.xml 、mapper.java 三个东西,觉得维护困难。
    sheeta
        13
    sheeta  
       2022-04-02 11:35:27 +08:00
    最好用的还是 laravel 的 orm
    knightdf
        14
    knightdf  
       2022-04-02 11:43:09 +08:00
    @cheng6563 那可不一定,sqlalchemy 就挺好用的
    zhaofy
        15
    zhaofy  
       2022-04-02 11:44:59 +08:00
    @coolair #12 竟然要写 entity ?
    coolair
        16
    coolair  
    OP
       2022-04-02 11:48:25 +08:00
    @zhaofy 也叫 model ?像这样的:

    package com.test.helloworld.model;

    public class Student {
    private Long id;
    private String name;

    public Student() {

    }

    public Student(String name, int sex, int age) {
    this.name = name;
    }

    public Long getId() {
    return id;
    }

    public void setId(Long id) {
    this.id = id;
    }

    ...
    }


    @knightdf 哈哈,我就是从 sqlalchemy 来的,一行 sql 都不用写啊。
    xuyang2
        17
    xuyang2  
       2022-04-02 12:20:03 +08:00
    jOOQ 了解一下。Typesafe SQL
    EscYezi
        18
    EscYezi  
       2022-04-02 13:14:23 +08:00 via iPhone
    mybatis X 插件+mybatis-plus ,复杂查询才在 xml 里写 sql
    privatetan
        19
    privatetan  
       2022-04-02 14:28:22 +08:00
    针对于开发的便捷性来说,使用 ORM 框架减少 SQL 编写的是一个不错的选择;

    但个人推荐还是多写写 SQL 比较好。
    Bingchunmoli
        20
    Bingchunmoli  
       2022-04-02 14:31:40 +08:00 via Android
    @coolair 代码生成,然后增删改查用一个实体,然后前端 vo ,bo ,dto 的
    yejinmo
        21
    yejinmo  
       2022-04-02 15:08:32 +08:00
    搭车问一下,Java 有没有类似 C# 的 LINQ to SQL 查询框架

    ```
    var dataList = session.From<Models.MetaData>()
    .Where(q => q.Type == 1 && q.TableName == tableName)
    .OrderByDescending(q => q.TagName)
    .ToList();
    ```
    watzds
        22
    watzds  
       2022-04-02 15:30:41 +08:00
    @coolair #16 可以自动生成这些东西。mybatis generator 或者自己改造
    XiLingHost
        23
    XiLingHost  
       2022-04-02 15:33:57 +08:00
    建议直接用 nosql ,比如 mongodb 或者 es ,一句 sql 都不用写
    Anshay
        24
    Anshay  
       2022-04-02 16:09:52 +08:00
    @coolair jpa 就相对简单很多了
    paradoxs
        25
    paradoxs  
       2022-04-02 16:12:12 +08:00
    假设你是一个小一点的项目,直接用 mybatisplus 这个框架,可以不写任何 SQL 。 就算是多表查询也可以分步查询,不需要写 resultmap 。
    coolair
        26
    coolair  
    OP
       2022-04-02 17:12:08 +08:00
    @Bingchunmoli @watzds 确实可以使用 generator 自动生成,已经试过了。

    @Anshay @potatowish @wudaye @hidemyself @lawler @lawler 刚用了下 JPA ,还不错,小项目应该不用写 SQL 了。

    @hay313955795 @xuyang2 jOOQ 用的多吗,很少看到介绍啊。

    @yejinmo 这个就跟 python 的 sqlalchemy 很像了,哈哈。
    banmuyutian
        27
    banmuyutian  
       2022-04-02 17:39:33 +08:00   ❤️ 1
    @yejinmo #21
    有类似的(Mybatis-Plus)但是做不到 LINQ 那么强大
    zhazi
        28
    zhazi  
       2022-04-02 18:23:45 +08:00   ❤️ 1
    @yejinmo queryFactory.selectFrom(tableA)
    .leftJoin(tableB).on(tableA.filed.eq(tableB.filed))
    .leftJoin(tableC).on(tableC.field.eq(tableB.filed))
    .where(tableA.field.eq(XXXX));
    刚在项目里粘贴出来一段改了下变量名
    TWorldIsNButThis
        29
    TWorldIsNButThis  
       2022-04-02 20:30:09 +08:00 via iPhone
    @yejinmo querydsl jooq ebean…
    国外这类框架挺多的
    hingbong
        30
    hingbong  
       2022-04-02 22:55:50 +08:00 via Android
    jooq 挺舒服
    hay313955795
        31
    hay313955795  
       2022-04-03 18:41:55 +08:00
    @coolair 国外用的多吧...毕竟国外的项目目标性比较专一....不想国内啥表都要关联一下..可能就需要用上各种手写的 sql 了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2832 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 14:40 · PVG 22:40 · LAX 07:40 · JFK 10:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.