
原系统是 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 &nbp; 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 的代码生成器 |