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

如何消除编写重复的 CRUD 的工作?

  •  2
     
  •   Macolor21 · 2018-10-02 15:25:30 +08:00 · 8450 次点击
    这是一个创建于 2248 天前的主题,其中的信息可能已经有所发展或是发生改变。
    框架 Spring boot + Mybatis, 对多个表的 CRUD 的重复性工作太多了,有什么好的设计方法能够避免这种情况
    第 1 条附言  ·  2018-12-11 11:35:15 +08:00

    整理一下:

    1. mybatis generator
    2. tk.mybatis //目前用的是这个,系统迭代的时候比较麻烦,
    3. matbis-plus
    4. jpa
    5. 自己写
    37 条回复    2018-10-22 11:27:26 +08:00
    lhx2008
        1
    lhx2008  
       2018-10-02 15:29:12 +08:00 via Android   ❤️ 1
    用生成器->性能损失->用 JPA
    weizhen199
        2
    weizhen199  
       2018-10-02 16:01:04 +08:00   ❤️ 1
    mybatis plus 了解下
    wshcdr
        3
    wshcdr  
       2018-10-02 16:01:24 +08:00
    脚手架啊
    likuku
        4
    likuku  
       2018-10-02 16:27:38 +08:00
    试试自己写生成代码的工具代码(用代码来生产代码,至少可以最大程度不影响他人已有的习惯)
    wd
        5
    wd  
       2018-10-02 16:29:27 +08:00 via iPhone
    用 orm ?
    x66
        6
    x66  
       2018-10-02 16:29:48 +08:00 via iPhone
    @lhx2008 JPA 比生成器生成出来的代码效率高??
    version
        7
    version  
       2018-10-02 16:31:45 +08:00
    模块化. rpc . 分业务用 redis 来储存 还是 mongodb 还是 mysql 这样进步也快呢.
    如果单纯 crud.高并发.多事物.改需求是一个大难题.只能重构
    GTim
        8
    GTim  
       2018-10-02 16:35:23 +08:00
    @lhx2008
    @wshcdr

    赞同
    misaka19000
        9
    misaka19000  
       2018-10-02 16:54:45 +08:00 via Android
    用 jpa
    luozic
        10
    luozic  
       2018-10-02 16:55:45 +08:00 via iPhone
    看场景,现代硬件就是用了 orm 也一般不是性能瓶颈。
    TommyLemon
        11
    TommyLemon  
       2018-10-02 16:57:56 +08:00   ❤️ 1
    CRUD 确实无聊,用自动化 API 解决吧。

    APIJSON 自动将前端传的 JSON 参数转为 SQL 语句执行并返回结果,
    期间自动校验权限、结构、内容,自动防 SQL 注入。

    通过自动化 API,前端可以定制任何数据、任何结构!
    大部分 HTTP 请求后端再也不用写接口了,更不用写文档了!
    前端再也不用和后端沟通接口或文档问题了!再也不会被文档各种错误坑了!
    后端再也不用为了兼容旧接口写新版接口和文档了!再也不会被前端随时随地没完没了地烦了!

    在线解析
    自动生成文档,清晰可读永远最新
    自动生成请求代码,支持 Android 和 iOS
    自动生成 JavaBean 文件,一键下载
    自动管理与测试接口用例,一键共享
    自动校验与格式化 JSON,支持高亮和收展

    对于前端
    不用再向后端催接口、求文档
    数据和结构完全定制,要啥有啥
    看请求知结果,所求即所得
    可一次获取任何数据、任何结构
    能去除重复数据,节省流量提高速度

    对于后端
    提供通用接口,大部分 API 不用再写
    自动生成文档,不用再编写和维护
    自动校验权限、自动管理版本、自动防 SQL 注入
    开放 API 无需划分版本,始终保持兼容
    支持增删改查、模糊搜索、正则匹配、远程函数等

    后端接口和文档自动化,前端(客户端) 定制返回 JSON 的数据和结构!
    创作不易,GitHub 右上角点 Star 支持下吧,谢谢^_^
    github.com/TommyLemon/APIJSON
    TommyLemon
        12
    TommyLemon  
       2018-10-02 16:59:06 +08:00
    @TommyLemon 提供了 SpringBoot 的 Demo 哦。
    TommyLemon
        13
    TommyLemon  
       2018-10-02 17:32:19 +08:00
    @TommyLemon
    APIJSON 目前 后端有 Java, C#, Node.ts 实现,
    前端有 Android-Java, iOS-Swift, Web-JavaScript, Web-Vue.js 实现。

    后端接口和文档自动化,前端(客户端) 定制返回 JSON 的数据和结构!
    创作不易,GitHub 右上角点 Star 支持下吧,谢谢^_^
    https://github.com/TommyLemon/APIJSON
    xcjx
        14
    xcjx  
       2018-10-02 17:49:51 +08:00 via Android
    对于多个表增删改查的无聊,没有什么根本的解决方法。如果有,那也只有这一种:好好干,升职了后,把这些烂活儿交给别人干。
    JmmBite
        15
    JmmBite  
       2018-10-02 18:11:34 +08:00 via iPhone
    意念编程。
    AltairT
        16
    AltairT  
       2018-10-02 18:47:43 +08:00 via iPhone
    用 mybatis 生成器只能生成简单的语句,还是习惯自己写 sql,jpa 虽然也能写 sql,但是对于复杂的语句还是不习惯
    zw1one
        17
    zw1one  
       2018-10-02 19:11:08 +08:00 via Android
    用工具根据表结构生成基本的 crud 啊,然后再按需求改改
    bobuick
        18
    bobuick  
       2018-10-02 19:56:52 +08:00   ❤️ 1
    自己往死里设计,封装你那部分业务就不会那么无聊了。而且把它当作你实验,想想貌似也还不错。
    以下是今天看到的一个例子:
    1.本来的 CRUD, 例如一个 transfer service,把 Account1 余额转给 Account2
    本来的写法,过程式:减 A1,if 检查 balance 是不是为负了,负了抛异常结束,然后给 A2 加余额,结束。

    改成:
    A1 呢不再是个贫血模式,看作 DDD 的设计模式来玩,加个 debt 方法,然后 Account 类呢,加个 OverDraftPolice 接口,用策略模式,当前业务可能不允许透支,但万一可能扩展呢?哈哈,实现个不允许透支但 OverDraftPolice 的 Impl

    然后把 Account 类里组合包含这个 Police 接口,然后呢 transfer 就写成这样了:
    account1.debt(amount)
    account2.debt(amount)

    这里面把 Police 规则封装进去。


    类似这种玩法,要是平常写过程式较多呢,就换个风格玩。你说有啥实际好处没?多数情况下答案是:有个大几把好处,业务要是能随码农感觉变动就不叫业务了。

    不过好歹自己玩过了,不会那么无聊啊。
    sgz
        19
    sgz  
       2018-10-02 22:47:03 +08:00   ❤️ 1
    mybatis plus 了解一下
    est
        20
    est  
       2018-10-02 23:25:10 +08:00
    还是挺怀念 vb6 时代的。做 CRUD 报表直接拖控件。选择数据源绑定 sql 即可。
    q397064399
        21
    q397064399  
       2018-10-02 23:32:44 +08:00
    @bobuick #18 DDD 只是个工具 不是银弹
    Raisu
        22
    Raisu  
       2018-10-02 23:36:05 +08:00
    前后端分离?或者自己抽象。。。
    BBCCBB
        23
    BBCCBB  
       2018-10-02 23:48:02 +08:00   ❤️ 1
    通用 mapper 做 curd 的工作,需要定制的单独写 sql
    woscaizi
        24
    woscaizi  
       2018-10-03 00:35:11 +08:00 via Android   ❤️ 1
    mybatis-plus 基本的 crud 默认都有,希望可以帮助你。
    Gathaly
        25
    Gathaly  
       2018-10-03 03:25:19 +08:00
    转开发方向,用得到 crud 的项目都是坑
    janxin
        26
    janxin  
       2018-10-03 07:49:17 +08:00
    @TommyLemon graphql 来一哈?
    bobuick
        27
    bobuick  
       2018-10-03 07:51:03 +08:00
    @q397064399 我有说银蛋么。lz 说无聊,那么换个姿势可能是个办法
    glfpes
        28
    glfpes  
       2018-10-03 14:22:19 +08:00 via Android
    有啥重复性工作么? dao 都是自动生成的。
    shm7
        29
    shm7  
       2018-10-03 15:24:44 +08:00 via iPhone
    其实你想想很多年前吹的很厉害的大数据系统很多也是增删改查而已。都是信息存储和检索。如果真能找到自动化的东西,就不需要程序员这种手工业者了。
    jaycheung
        30
    jaycheung  
       2018-10-03 17:15:12 +08:00
    TommyLemon
        31
    TommyLemon  
       2018-10-03 17:15:54 +08:00
    @janxin
    APIJSON 远比 Facebook 的 GraphQL 强大易用,详细对比:
    https://juejin.im/post/5ae80edd51882567277433cf
    TommyLemon
        32
    TommyLemon  
       2018-10-03 17:17:54 +08:00
    @shm7 APIJSON 就做到了「大部分」 的 CRUD 接口自动化哦
    github。com/TommyLemon/APIJSON
    swim2sun
        33
    swim2sun  
       2018-10-03 19:15:09 +08:00 via iPhone
    spring data jpa
    janxin
        34
    janxin  
       2018-10-03 20:54:56 +08:00
    @TommyLemon 你这个对比看了一下没什么意义啊,你没搞清楚 GraphQL 的使用场景
    TommyLemon
        35
    TommyLemon  
       2018-10-03 21:59:39 +08:00
    @janxin 那你说下它的使用场景是什么,以及它有什么优势
    gejun123456
        36
    gejun123456  
       2018-10-04 18:38:15 +08:00 via iPhone
    xiaoxinshiwo
        37
    xiaoxinshiwo  
       2018-10-22 11:27:26 +08:00
    tk.mybatis
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3603 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:49 · PVG 18:49 · LAX 02:49 · JFK 05:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.