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

如果有个 CRUD 工具会不会有兴趣用?

  •  
  •   iceteacover ·
    sunjirepo · 2021-04-15 14:18:48 +08:00 · 3586 次点击
    这是一个创建于 1323 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司自研一款基于 Mybatis-Generator 的 CRUD 代码生成工具,能够自动生成 Controller-Business-Service-Mapper 四层。生成各层的出入参数和转换类(基于 JSON )。

    使用下来非常快,CRUD 几乎不用再添加新代码。

    大多数 Java 程序员开发工作避免不了 CRUD,故打算花些时间开源,不知道会不会有人用以及是否有类似的开源产品。

    约定数据库表结果必有 ID/DELETED/CREATED_AT/CREATED_BY/MODIFIED_AT/MODIFIED_BY 6 个字段,且 DELETED 字段类型同 ID 字段( bigint ),deleted=0 表示未删除,deleted=id 值表示删除。

    PS:尝试过 Mybatis-Plus 和 单纯 Mybatis-Generetor,还是要写部分代码。 PPS:分层模型各有各的习惯和说法,但用 CRUD 工具后基本不在有争论,无形消弭。

    29 条回复    2021-04-23 16:33:06 +08:00
    mlcq
        1
    mlcq  
       2021-04-15 14:24:23 +08:00   ❤️ 1
    没兴趣,你这个工具怎么解决连表的问题,要是不需要连表,mp 都能解决了,你这个意义何在呢
    wolfie
        2
    wolfie  
       2021-04-15 14:30:57 +08:00   ❤️ 1
    这种代码生成挺多的,而且没难度。
    lowic
        3
    lowic  
       2021-04-15 14:40:21 +08:00   ❤️ 1
    如果只有比较基础的功能的话,mp 应该已经做的够好了
    xlui
        4
    xlui  
       2021-04-15 14:50:03 +08:00
    收益不是很明显,相反想用这个工具还被限定了数据库字段。

    另外,关于分层,除非是从零新建的项目,不然分层还是按照原有的模式来,要不会被后边维护的人骂死。
    est
        5
    est  
       2021-04-15 15:05:39 +08:00   ❤️ 1
    你说的这种 「 CRUD 工具」 本质就是建立 RDBMS 视图

    遇到视图不能解决的复杂逻辑,你的工具一样解决不了。
    huifer
        6
    huifer  
       2021-04-15 15:19:14 +08:00   ❤️ 1
    catchexception
        7
    catchexception  
       2021-04-15 15:22:37 +08:00   ❤️ 1
    多年没写过 CRUD 了。。。
    hb0730
        8
    hb0730  
       2021-04-15 15:22:39 +08:00   ❤️ 1
    用 mp 自己在封装一下,从 controller 到 mapper 就都有了,在扩展一下 mp 的代码生成
    fy
        9
    fy  
       2021-04-15 15:23:10 +08:00   ❤️ 1
    作为一个 crud 框架作者,我意识到框架越是工于设计,反而会带来越高的使用成本……所以我计划全部生成 json schema 一把梭了
    yeqizhang
        10
    yeqizhang  
       2021-04-15 15:31:15 +08:00 via Android   ❤️ 1
    easy-code

    然后自己写 groovy 模板也可以呀
    gongym
        11
    gongym  
       2021-04-15 16:15:40 +08:00   ❤️ 1
    yxx1993
        12
    yxx1993  
       2021-04-15 16:49:37 +08:00   ❤️ 1
    Imindzzz
        13
    Imindzzz  
       2021-04-15 17:15:18 +08:00   ❤️ 1
    很难做到又通用又简单

    有必要在自己公司小范围封装一个,推广开源我觉得没多大市场。
    iceteacover
        14
    iceteacover  
    OP
       2021-04-15 19:08:14 +08:00
    @mlcq 这个工具不能解决连表问题,多表合并成前端对象还需要手工写。 我现在一般不连表查,单表查完再走第二条 SQL,把 sql 的连表放在内存,表查询尽量简单。
    iceteacover
        15
    iceteacover  
    OP
       2021-04-15 19:20:09 +08:00
    @lowic mp 的确功能强大,但是有一个删除字段,只能用 0/1 或者 时间字段,我希望用 id 的 bigint,避免唯一索引和逻辑删除问题 https://cloud.tencent.com/developer/article/1531915 。这种逻辑如果写在自己的 crud 当中就很方便,相比较改造 mp 。
    iceteacover
        16
    iceteacover  
    OP
       2021-04-15 19:21:21 +08:00
    @fy 真的没有狗头在最后吗?大佬请不要放弃...
    iceteacover
        17
    iceteacover  
    OP
       2021-04-15 19:22:55 +08:00
    @xd199153 谢谢提点,公司内部用大概是最大价值,开源反倒能用的少。
    iceteacover
        18
    iceteacover  
    OP
       2021-04-15 19:26:26 +08:00   ❤️ 1
    @catchexception 恭喜脱离苦海
    iceteacover
        19
    iceteacover  
    OP
       2021-04-15 19:30:48 +08:00
    @gongym go 大佬你好,我还在 Java 里挣扎,顺带问下 Java 转 Go 需要补哪些知识,到可用程度一般学大概要多久(天资一般偏下,写了几年 Java )
    iceteacover
        20
    iceteacover  
    OP
       2021-04-15 19:32:24 +08:00
    @huifer jpa 大佬好,公司用 mybatis 惨。。。我看国外的程序员很多用 jpa,不知道为啥国内的几家公司都选择了 mybatis 。
    fy
        21
    fy  
       2021-04-15 21:22:23 +08:00
    @iceteacover 我真的计划这么搞,不过我是 python 实现的。但现在说起来自己用 python 的机会也不多了,主力是 ts 和 go
    iceteacover
        22
    iceteacover  
    OP
       2021-04-16 08:17:57 +08:00 via iPhone
    @fy 全栈牛逼,最近半年在公司写 react,感觉前端是很不一样的思维,有帮助。问下用 go 方便吗?要不要造轮子(目前主力 Java,有事实上的框架标准)?
    huifer
        23
    huifer  
       2021-04-16 08:48:41 +08:00   ❤️ 1
    mybatis 和 JPA 应该大差不差没必要太过于纠结使用谁,要说存在迁移数据库的话我可能选择 JPA 。mybatis 版本的 CRUD 插件也有 https://gitee.com/pychfarm_admin/crud @iceteacover
    ychost
        24
    ychost  
       2021-04-16 09:43:50 +08:00
    生成代码的一律拉黑,万一逻辑变复杂还是挺蛋疼的,最好是用 JPA 或者 Mybatis-Plus,tk.mybatis 之类的,隐藏细节,提供扩展性,
    Kaiv2
        25
    Kaiv2  
       2021-04-16 10:37:42 +08:00
    https://github.com/JavaHello/erm-generator
    一个简单的 dao 层工具,支持 sql 差异输出。
    clf
        26
    clf  
       2021-04-16 10:48:13 +08:00
    Mybatis-Plus 的代码生成器生成 Service-Mapper 我觉得就够了……因为对外肯定是 VO 封装的。

    要做进一步的统一管理,比如我设计的基类里就有 deleteFlag 、createTime 、updateTime 、id,四个字段,删除的时候用 MP 的逻辑删除配置,0L 是未删除,时间戳是已经删除。Time 字段都是用 MP 自带的注入方法注入。配置完一个 BaseModel 类后,其他全部的类继承它就好了。
    fy
        27
    fy  
       2021-04-17 21:41:09 +08:00
    @iceteacover golang 写 web 的话感觉和 js 的 koa,或者是 python 的 flask 差不多,应该没 Java 那么系统化。轮子倒也不用怎么弄
    iceteacover
        28
    iceteacover  
    OP
       2021-04-18 12:33:54 +08:00 via iPhone
    @fy 谢谢
    liian2019
        29
    liian2019  
       2021-04-23 16:33:06 +08:00
    我也写了一个 ,来应付公司统计代码量的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5998 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:09 · PVG 10:09 · LAX 18:09 · JFK 21:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.