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