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