原系统是 php 一个开源的系统搞的,积累了多年的数据,大约上千张表。
现在系统迁移到 java ,传统的 ssm ,顿时尴尬了。这么多表的 crud ,要生成 MVC 、mybaitis 代码,简直是噩梦,而且逻辑基本都一样。
有无直接成熟的组件,不生成代码,完成这些表的基本 crud 操作,不考虑权限,最好带分页。

原系统是 php 一个开源的系统搞的,积累了多年的数据,大约上千张表。
现在系统迁移到 java ,传统的 ssm ,顿时尴尬了。这么多表的 crud ,要生成 MVC 、mybaitis 代码,简直是噩梦,而且逻辑基本都一样。
有无直接成熟的组件,不生成代码,完成这些表的基本 crud 操作,不考虑权限,最好带分页。
1 BaiShui Jan 3, 2024 mybaitis-plus 看看文档就能搞 |
2 huihuiHK Jan 3, 2024 mybaitis-plus 一键生成 |
3 lsk569937453 Jan 3, 2024 闲得蛋疼才重构。 |
4 zhengshangjin Jan 3, 2024 这不是吃饱了撑的么,PHP 继续迭代跑呗。 |
6 VensonEEE OP @zhengshangjin 太老了,漏洞补不了了,刚搞 XC ,一起换了... |
7 cvbnt Jan 3, 2024 via Android IDEA 很多插件能一键生成 |
10 VensonEEE OP 有没有不用生成的,生成几千个文件也很糟心,那种连上数据库就能提供 api 的... |
11 28Sv0ngQfIE7Yloe Jan 3, 2024 如果都是生成的话 不得有上万个类啊。。这 Java 项目编译一下得多慢? 这些表有没有什么共同点?没有的话怎么搞出几千个的? |
12 sparklee Jan 3, 2024 自己封装一下, 直接 JdbcTempleate 执行 sql |
13 sparklee Jan 3, 2024 plate |
14 199808lanlan1111 Jan 3, 2024 via Android 团队多少人,这种重构应该要分多个服务 |
15 CheckTime Jan 3, 2024 要不看看 Jeecg 的代码生成,然后看能不能借鉴。批量导入表,批量生成代码 |
16 gejun123456 Jan 3, 2024 mybatis + pageHelper 就行了,可以试试 intellij 插件 MybatisCodeHelperPro 快速生成代码 |
17 XCFOX Jan 3, 2024 你可能需要低代码框架:不生成代码,直接启动数据库的 crud 的 GraphQL 接口,后端几乎不用写代码,让前端直接调用 GraphQL 接口。 https://github.com/graphile/crystal https://github.com/SeaQL/seaography https://github.com/nocodb/nocodb https://github.com/nhost/nhost |
18 zjsxwc Jan 3, 2024 不如直接针对 php 项目写个转译器转换到 java jpa 。 |
20 cabing Jan 3, 2024 如果功能一样,看能不能写个代码生成器 |
21 jlkm2010 Jan 3, 2024 mybaitis-plus |
22 potatowish Jan 3, 2024 via iPhone 你可能对 java 有什么误解,写代码要灵活。不用生成类,循环读取表,根据表字段动态生成 sql ,我刚毕业那会就做过,大概是报表系统类似的需求 |
23 potatowish Jan 3, 2024 via iPhone @potatowish 控制器中,一个接口共用,参数传表名、字段名 |
24 mws Jan 3, 2024 via Android easycode 插件可以生成 controller ,service 层代码,还可以自己用 velocity 写模板 |
25 cslive Jan 3, 2024 velocity 模板生成,其它类似模板也行 |
26 zzzmh Jan 3, 2024 mybatisplus + idea 插件 mybatisx 但是只能生成 crud 而且是 jsp 还是接口,接口这块应该是要自己写的 |
27 c2const Jan 3, 2024 重构不彻底,不如不重构,接着在原来的代码屎山上开发 :) |
29 VensonEEE OP |
30 VensonEEE OP 大家觉得这个怎么样? 大量重复代码,我感觉很难接受... 编译速度,启动速度,内存,都是难以接受的。 #22 是个办法 ,我想找个成熟点的,少修 bug 早下班... |
32 taogen Jan 3, 2024 1. PHP 到 Java ,换语言本来就工作量大,不仅仅是 CRUD 操作工作量大。可以考虑重新设计,用 Java 重写。 2. 表多不用 ORM (object-relational mapping) 就行,上面已经有人说了用 JdbcTemplate 。 |
33 lcy630409 Jan 3, 2024 你是想要一个读取数据库的工具? php 的大部分逻辑都没问题的话,就继续保留,你就直接调用他的接口就行,php 不对外,把 php 当做一个中间层, |
34 lcy630409 Jan 3, 2024 |
35 ZiNai Jan 3, 2024 via iPhone 让 PHP 老项目继续跑着。新需求开新项目,随便什么你喜欢的技术栈,你这个偏业务的项目核心就是读数据库呗。然后渐进式的替换掉老接口。部分 common lib 直接 gpt 转写或者放 db 的 function 里呗 |
36 zjsxwc Jan 3, 2024 @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 通过其语法来组合不同查询到一次请求。 |
37 kekeco Jan 3, 2024 写通用的工具生成下就行了 基础的都有了 就看你自己怎么定义模板的问题 |
38 VensonEEE OP @zjsxwc 大量的业务表,低代码,多租户;以至于传统的 controller services mapper model 那一套不适用了。 另一个是接口大多,大部分都是重复的工作量。怎样准确、统一的完成业务,不就得这么玩么。 |
39 chosen1cwp Jan 3, 2024 erupt |
40 sampeng Jan 3, 2024 从写单元测试开始。上千的表。接口也差不多上千了。你怎么保证重构完了一摸一样的结果和逻辑? |
41 sampeng Jan 3, 2024 按回车按快了。。 另一方面肯定不是一蹴而就,前面网关做分离工作,迁移一批网管流转新流量过来一批。反正这么大的规模,就算是看起来是差不多的业务逻辑,但凡错一个,估计得祭天。 |
42 5200 Jan 3, 2024 为什么要重构呢,要不试试 Go ,或者换 PHP 的 swoole 类型的框架。 |
43 zuixinwenyue Jan 3, 2024 PDManer 看下这个,可以根据表来生成 controller service mapper entity 代码 |
44 meeop Jan 3, 2024 逻辑基本都一样,那就还好了,无所谓多少张表,自己写个代码生成机解析库表自动生成 |
45 wu00 Jan 3, 2024 这种谁弄谁死; 唯一的出路是逐步替换慢慢迁移 |
46 llf007 Jan 3, 2024 我们开发个 APISQL 的中间件,不用写 JAVA 代码,直接用 SQL 生成 API ,自带分页。 如果只是每张表的基本 CRUD ,上千张表应该没什么压力。 只是再改改软件,让批量对整库每张表生成 API 的问题。 请到 www.apisql.cn 试着联系我们,看不能帮上忙。 |
47 llf007 Jan 3, 2024 少了字:(,回复不能修改,再发一下 我们开发个 APISQL 的中间件,不用写 JAVA 代码,直接用 SQL 生成 API ,自带分页。 如果只是每张表的基本 CRUD ,上千张表应该没什么压力。 只是再改改软件,让批量对整库每张表生成 API 的问题。 请到 www.apisql.cn 试着联系我们,看能不能帮上忙。 |
48 VensonEEE OP |
49 llf007 Jan 3, 2024 是的,支持企业内网私有化部署。 |
50 renmu Jan 3, 2024 via Android 又不是不能用.jpg |
51 ZZ74 Jan 3, 2024 从业多年,没见过几千张表的项目..... |
52 StarkWhite Jan 4, 2024 2023 年了,还有人不知道 meta(facebook) 开源的 graphql ,都快 20k star 了,强烈推荐 t/589138 |
53 StarkWhite Jan 4, 2024 graphql 不用写代码,基本啥都能搞定 |
54 ChenSino Jan 4, 2024 上千表说明业务够复杂,这个也敢动? |
55 visper Jan 4, 2024 直接 jdbc 操作。通过表名能读出所有表字段。然后写一个公共的方法 saveData(Map data, String tableName) 根据 data 里面的 id 去查一下如果存在就造成 updatesql 如果不存在就生成 insert...... |
56 summerLast Jan 4, 2024 你需要的是搞一个路径到表的映射 |
58 fengfisher3 Jan 4, 2024 @StarkWhite 友情提示,已经 2024 年了。 |
59 kd9yYw2RyhQwAwzn Jan 4, 2024 @VensonEEE 这个很不建议 |
60 loginv2 Jan 4, 2024 还不如升级 PHP ,代价小的多 |
61 zzzzzzZ Jan 4, 2024 @StarkWhite 2024 年了还有人在推 GraphQL 啊? |
62 VensonEEE OP |
63 zw1one Jan 4, 2024 你弄成 BI 项目呗,写在代码里的 javabean 都是系统常用的 crud 。你几千张表的需求一般是数据中台或者 BI 项目了。 |
64 WashFreshFresh Jan 4, 2024 如果都是单表查询 我建议 jpa |
65 jonsmith Jan 4, 2024 这么多表也敢重构,计划多久完成?期间有新功能迭代咋办?投入大量人力老板会支持吗? |
66 shalk Jan 4, 2024 生成基本的 crud 简单。 不过 php 转 java ,一个接口可能有几十种上百种 if 判断,同时操作多个表,照着 java 写,可能各种看不懂,这个才是噩梦。 |
67 ragnaroks Jan 4, 2024 拆分接口增量迁移 |
68 dc2002007 Jan 4, 2024 换 golang 也行啊 ,换什么 java ? |
69 StarkWhite Jan 4, 2024 |
70 StarkWhite Jan 4, 2024 @fengfisher3 哦对,2024 年了还有不知道 graphql 的。。。 |
72 StarkWhite Jan 4, 2024 |
73 StarkWhite Jan 4, 2024 @mars2023 graphql 把你咋了?居然说成是噩梦 |
74 nbboy Jan 4, 2024 转个 p,不整理业务,换语言也只能让你从一个泥潭跳入另外一个泥潭 |
75 StarkWhite Jan 4, 2024 @zzzzzzZ graphql 还是很火啊,怎么不能推了? |
76 StarkWhite Jan 4, 2024 |
77 ceekay Jan 4, 2024 写个 ftl 模板 再加个生成器 增删改查加注释文档全有了 然后找到对应的 api 去加业务 无非还是 token 鉴权的事情 |
78 watzds Jan 4, 2024 到底什么样的表,你把表名当参数传进去呢 |
79 hobbitlhy Jan 4, 2024 mybatis-plus 代码生成器,自己配置一套模板,生成一下应该可以的 |
80 ixixi Jan 4, 2024 把表的数据存成 json 这样用一张表就行了 |
81 coolmenu Jan 4, 2024 不如升级 php 实用呢。。。上千个表,好多字段当时怎么设计的,比如删除是做标记还是物理删除,这么多细节,太可怕了。 |
83 StarkWhite Jan 4, 2024 @ymz 复杂业务下,挺正常的 |
84 AnsonZao Jan 5, 2024 推荐你试试这个 fireboom.cloud |
85 EthanV2 Jan 5, 2024 刚刚发现这种,https://gitee.com/ssssssss-team/magic-api magic-api 是一个基于 Java 的接口快速开发框架,编写接口将通过 magic-api 提供的 UI 界面完成,自动映射为 HTTP 接口,无需定义 Controller 、Service 、Dao 、Mapper 、XML 、VO 等 Java 对象即可完成常见的 HTTP API 接口开发 |
86 williamshan Jan 5, 2024 via Android mybatisplus 的代码生成器 |