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

PHP 转 Java ,上千张表需要 CRUD

  •  2
     
  •   VensonEEE · 110 天前 · 7888 次点击
    这是一个创建于 110 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原系统是 php 一个开源的系统搞的,积累了多年的数据,大约上千张表。

    现在系统迁移到 java ,传统的 ssm ,顿时尴尬了。这么多表的 crud ,要生成 MVC 、mybaitis 代码,简直是噩梦,而且逻辑基本都一样。

    有无直接成熟的组件,不生成代码,完成这些表的基本 crud 操作,不考虑权限,最好带分页。

    87 条回复    2024-01-09 11:56:16 +08:00
    BaiShui
        1
    BaiShui  
       110 天前
    mybaitis-plus 看看文档就能搞
    huihuiHK
        2
    huihuiHK  
       110 天前
    mybaitis-plus 一键生成
    lsk569937453
        3
    lsk569937453  
       110 天前
    闲得蛋疼才重构。
    zhengshangjin
        4
    zhengshangjin  
       110 天前
    这不是吃饱了撑的么,PHP 继续迭代跑呗。
    VensonEEE
        5
    VensonEEE  
    OP
       110 天前
    @BaiShui 没有通用的吧,还得逐个表搞代码。也缺少 controller 那一套东西
    VensonEEE
        6
    VensonEEE  
    OP
       110 天前
    @zhengshangjin 太老了,漏洞补不了了,刚搞 XC ,一起换了...
    cvbnt
        7
    cvbnt  
       110 天前 via Android
    IDEA 很多插件能一键生成
    zvvvvv
        8
    zvvvvv  
       110 天前
    @VensonEEE mybatis-plus 不是有插件根据表字段直接生成 controller 、service 、mapper 嘛
    zvvvvv
        9
    zvvvvv  
       110 天前
    @zvvvvv 还有实体对象
    VensonEEE
        10
    VensonEEE  
    OP
       110 天前
    有没有不用生成的,生成几千个文件也很糟心,那种连上数据库就能提供 api 的...
    Morii
        11
    Morii  
       110 天前
    如果都是生成的话 不得有上万个类啊。。这 Java 项目编译一下得多慢?

    这些表有没有什么共同点?没有的话怎么搞出几千个的?
    sparklee
        12
    sparklee  
       110 天前
    自己封装一下, 直接 JdbcTempleate 执行 sql
    sparklee
        13
    sparklee  
       110 天前
    plate
    199808lanlan1111
        14
    199808lanlan1111  
       110 天前 via Android
    团队多少人,这种重构应该要分多个服务
    CheckTime
        15
    CheckTime  
       110 天前
    要不看看 Jeecg 的代码生成,然后看能不能借鉴。批量导入表,批量生成代码
    gejun123456
        16
    gejun123456  
       110 天前
    mybatis + pageHelper 就行了,可以试试 intellij 插件 MybatisCodeHelperPro 快速生成代码
    XCFOX
        17
    XCFOX  
       110 天前
    你可能需要低代码框架:不生成代码,直接启动数据库的 crud 的 GraphQL 接口,后端几乎不用写代码,让前端直接调用 GraphQL 接口。

    https://github.com/graphile/crystal
    https://github.com/SeaQL/seaography
    https://github.com/nocodb/nocodb
    https://github.com/nhost/nhost
    zjsxwc
        18
    zjsxwc  
       110 天前
    不如直接针对 php 项目写个转译器转换到 java jpa 。
    947347
        19
    947347  
       110 天前
    @VensonEEE #10

    Spring Data REST
    Spring Data JPA
    cabing
        20
    cabing  
       110 天前
    如果功能一样,看能不能写个代码生成器
    jlkm2010
        21
    jlkm2010  
       110 天前
    mybaitis-plus
    potatowish
        22
    potatowish  
       110 天前 via iPhone   ❤️ 1
    你可能对 java 有什么误解,写代码要灵活。不用生成类,循环读取表,根据表字段动态生成 sql ,我刚毕业那会就做过,大概是报表系统类似的需求
    potatowish
        23
    potatowish  
       110 天前 via iPhone
    @potatowish 控制器中,一个接口共用,参数传表名、字段名
    mws
        24
    mws  
       110 天前 via Android
    easycode 插件可以生成 controller ,service 层代码,还可以自己用 velocity 写模板
    cslive
        25
    cslive  
       110 天前
    velocity 模板生成,其它类似模板也行
    zzzmh
        26
    zzzmh  
       110 天前
    mybatisplus + idea 插件 mybatisx 但是只能生成 crud 而且是 jsp 还是接口,接口这块应该是要自己写的
    c2const
        27
    c2const  
       110 天前
    重构不彻底,不如不重构,接着在原来的代码屎山上开发 :)
    mars2023
        28
    mars2023  
       110 天前
    @XCFOX #17 你这是让 op 不用重构后端,改成重构前端是吧;
    再则,GraphQL 对于客户端真是噩梦 😈(又或者是因为我只是一个很菜的客户端🐶)
    VensonEEE
        29
    VensonEEE  
    OP
       110 天前
    VensonEEE
        30
    VensonEEE  
    OP
       110 天前
    大家觉得这个怎么样?
    大量重复代码,我感觉很难接受... 编译速度,启动速度,内存,都是难以接受的。
    #22 是个办法 ,我想找个成熟点的,少修 bug 早下班...
    taogen
        31
    taogen  
       110 天前
    @VensonEEE #29
    国内开源项目不建议使用
    taogen
        32
    taogen  
       110 天前
    1. PHP 到 Java ,换语言本来就工作量大,不仅仅是 CRUD 操作工作量大。可以考虑重新设计,用 Java 重写。

    2. 表多不用 ORM (object-relational mapping) 就行,上面已经有人说了用 JdbcTemplate 。
    lcy630409
        33
    lcy630409  
       110 天前
    你是想要一个读取数据库的工具?
    php 的大部分逻辑都没问题的话,就继续保留,你就直接调用他的接口就行,php 不对外,把 php 当做一个中间层,
    lcy630409
        34
    lcy630409  
       110 天前
    如果只有你一个人 建议别动算了,怎么方便怎么来 能跑就行,千万别想着大动干戈,不然这年都过不好了
    ZiNai
        35
    ZiNai  
       110 天前 via iPhone
    让 PHP 老项目继续跑着。新需求开新项目,随便什么你喜欢的技术栈,你这个偏业务的项目核心就是读数据库呗。然后渐进式的替换掉老接口。部分 common lib 直接 gpt 转写或者放 db 的 function 里呗
    zjsxwc
        36
    zjsxwc  
       110 天前
    @XCFOX #17
    @VensonEEE #28

    我想问一下,GraphQL 与 APIJSON 的使用场景。

    APIJOSN 我看了下它的文档,知道 APIJSON 本质就是一个可以在 json 里嵌入 sql 语句的 sql 方言。

    GraphQL 的 server 我看了下,
    和云厂商的 serverless lambda 差不多,serverless 要用户写每一个 api 的实现,
    GraphQL 同样需要用户写每个 query 与 mutation 的实现,
    serverless 通过 step-functions 来组合不同 api 到一次请求,GraphQL 通过其语法来组合不同查询到一次请求。
    kekeco
        37
    kekeco  
       110 天前
    写通用的工具生成下就行了 基础的都有了 就看你自己怎么定义模板的问题
    VensonEEE
        38
    VensonEEE  
    OP
       110 天前
    @zjsxwc 大量的业务表,低代码,多租户;以至于传统的 controller services mapper model 那一套不适用了。
    另一个是接口大多,大部分都是重复的工作量。怎样准确、统一的完成业务,不就得这么玩么。
    chosen1cwp
        39
    chosen1cwp  
       110 天前
    erupt
    sampeng
        40
    sampeng  
       110 天前
    从写单元测试开始。上千的表。接口也差不多上千了。你怎么保证重构完了一摸一样的结果和逻辑?
    sampeng
        41
    sampeng  
       110 天前
    按回车按快了。。
    另一方面肯定不是一蹴而就,前面网关做分离工作,迁移一批网管流转新流量过来一批。反正这么大的规模,就算是看起来是差不多的业务逻辑,但凡错一个,估计得祭天。
    5200
        42
    5200  
       110 天前
    为什么要重构呢,要不试试 Go ,或者换 PHP 的 swoole 类型的框架。
    zuixinwenyue
        43
    zuixinwenyue  
       110 天前
    PDManer 看下这个,可以根据表来生成 controller service mapper entity 代码
    meeop
        44
    meeop  
       110 天前
    逻辑基本都一样,那就还好了,无所谓多少张表,自己写个代码生成机解析库表自动生成
    wu00
        45
    wu00  
       110 天前
    这种谁弄谁死;
    唯一的出路是逐步替换慢慢迁移
    llf007
        46
    llf007  
       110 天前
    我们开发个 APISQL 的中间件,不用写 JAVA 代码,直接用 SQL 生成 API ,自带分页。

    如果只是每张表的基本 CRUD ,上千张表应该没什么压力。

    只是再改改软件,让批量对整库每张表生成 API 的问题。

    请到 www.apisql.cn 试着联系我们,看不能帮上忙。
    llf007
        47
    llf007  
       110 天前
    少了字:(,回复不能修改,再发一下

    我们开发个 APISQL 的中间件,不用写 JAVA 代码,直接用 SQL 生成 API ,自带分页。

    如果只是每张表的基本 CRUD ,上千张表应该没什么压力。

    只是再改改软件,让批量对整库每张表生成 API 的问题。

    请到 www.apisql.cn 试着联系我们,看能不能帮上忙。
    VensonEEE
        48
    VensonEEE  
    OP
       109 天前
    谢谢各位。

    @llf007 这个是要内网部署的。所以谢谢你了。
    @wu00 @sampeng 大部分都是 crud ,有一些特别的操作肯定是要自己写代码、上测试套装的。
    时间也不急,因为很久没更新了。单纯的不想写 crud 以及搞几千个基础的类。启动太慢了。
    llf007
        49
    llf007  
       109 天前
    是的,支持企业内网私有化部署。
    renmu
        50
    renmu  
       109 天前 via Android
    又不是不能用.jpg
    ZZ74
        51
    ZZ74  
       109 天前   ❤️ 1
    从业多年,没见过几千张表的项目.....
    StarkWhite
        52
    StarkWhite  
       109 天前
    2023 年了,还有人不知道 meta(facebook) 开源的 graphql ,都快 20k star 了,强烈推荐
    https://www.v2ex.com/t/589138
    StarkWhite
        53
    StarkWhite  
       109 天前
    graphql 不用写代码,基本啥都能搞定
    ChenSino
        54
    ChenSino  
       109 天前
    上千表说明业务够复杂,这个也敢动?
    visper
        55
    visper  
       109 天前
    直接 jdbc 操作。通过表名能读出所有表字段。然后写一个公共的方法 saveData(Map data, String tableName) 根据 data 里面的 id 去查一下如果存在就造成 updatesql 如果不存在就生成 insert......
    summerLast
        56
    summerLast  
       109 天前
    你需要的是搞一个路径到表的映射
    cndenis
        57
    cndenis  
       109 天前
    @ZZ74 按日期分表的项目, 每天新建几张表, 很容易就几千张
    fengfisher3
        58
    fengfisher3  
       109 天前
    @StarkWhite 友情提示,已经 2024 年了。
    kd9yYw2RyhQwAwzn
        59
    kd9yYw2RyhQwAwzn  
       109 天前
    @VensonEEE 这个很不建议
    loginv2
        60
    loginv2  
       109 天前
    还不如升级 PHP ,代价小的多
    zzzzzzZ
        61
    zzzzzzZ  
       109 天前
    @StarkWhite 2024 年了还有人在推 GraphQL 啊?
    VensonEEE
        62
    VensonEEE  
    OP
       109 天前
    @ChenSino @ZZ74 @cndenis 确实类似这种... 一类业务一个台账,数据多且杂,不好合并表。 现在不是推 xinchuang 么 PHP 这个玩意儿有点 ZZ 不正确
    zw1one
        63
    zw1one  
       109 天前
    你弄成 BI 项目呗,写在代码里的 javabean 都是系统常用的 crud 。你几千张表的需求一般是数据中台或者 BI 项目了。
    WashFreshFresh
        64
    WashFreshFresh  
       109 天前
    如果都是单表查询 我建议 jpa
    jonsmith
        65
    jonsmith  
       109 天前
    这么多表也敢重构,计划多久完成?期间有新功能迭代咋办?投入大量人力老板会支持吗?
    shalk
        66
    shalk  
       109 天前
    生成基本的 crud 简单。
    不过 php 转 java ,一个接口可能有几十种上百种 if 判断,同时操作多个表,照着 java 写,可能各种看不懂,这个才是噩梦。
    ragnaroks
        67
    ragnaroks  
       109 天前
    拆分接口增量迁移
    dc2002007
        68
    dc2002007  
       109 天前
    换 golang 也行啊 ,换什么 java ?
    StarkWhite
        70
    StarkWhite  
       109 天前   ❤️ 1
    @fengfisher3 哦对,2024 年了还有不知道 graphql 的。。。
    KP45
        71
    KP45  
       109 天前
    StarkWhite
        72
    StarkWhite  
       109 天前
    @ZZ74 我也是,几千张表太夸张了,不知道是不是分库分表导致的 @VensonEEE
    StarkWhite
        73
    StarkWhite  
       109 天前
    @mars2023 graphql 把你咋了?居然说成是噩梦
    nbboy
        74
    nbboy  
       109 天前
    转个 p,不整理业务,换语言也只能让你从一个泥潭跳入另外一个泥潭
    StarkWhite
        75
    StarkWhite  
       109 天前
    @zzzzzzZ graphql 还是很火啊,怎么不能推了?
    StarkWhite
        76
    StarkWhite  
       109 天前
    @shalk 所以要像 #18 @zjsxwc 说的写个 php - java 的转译器?
    ceekay
        77
    ceekay  
       109 天前
    写个 ftl 模板 再加个生成器 增删改查加注释文档全有了 然后找到对应的 api 去加业务 无非还是 token 鉴权的事情
    watzds
        78
    watzds  
       109 天前
    到底什么样的表,你把表名当参数传进去呢
    hobbitlhy
        79
    hobbitlhy  
       109 天前
    mybatis-plus 代码生成器,自己配置一套模板,生成一下应该可以的
    ixixi
        80
    ixixi  
       109 天前
    把表的数据存成 json 这样用一张表就行了 🤭
    coolmenu
        81
    coolmenu  
       109 天前
    不如升级 php 实用呢。。。上千个表,好多字段当时怎么设计的,比如删除是做标记还是物理删除,这么多细节,太可怕了。
    ymz
        82
    ymz  
       109 天前
    @shalk 为什么 一个接口可能有几十种上百种 if 判断 ,这什么垃圾代码
    StarkWhite
        83
    StarkWhite  
       108 天前
    @ymz 复杂业务下,挺正常的
    AnsonZao
        84
    AnsonZao  
       108 天前
    推荐你试试这个 fireboom.cloud
    EthanV2
        85
    EthanV2  
       108 天前
    刚刚发现这种,https://gitee.com/ssssssss-team/magic-api
    magic-api 是一个基于 Java 的接口快速开发框架,编写接口将通过 magic-api 提供的 UI 界面完成,自动映射为 HTTP 接口,无需定义 Controller 、Service 、Dao 、Mapper 、XML 、VO 等 Java 对象即可完成常见的 HTTP API 接口开发
    williamshan
        86
    williamshan  
       108 天前 via Android
    mybatisplus 的代码生成器
    BaiShui
        87
    BaiShui  
       104 天前
    @VensonEEE controller service mapper entity 这些代码都可以一键生成
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4474 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:12 · PVG 18:12 · LAX 03:12 · JFK 06:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.