如果数据库后期表字段修改了或者增加了, Mybatis 的实体类、Mapper 都要重新生成一遍吗?甚至一些修改的字段已经侵入到 service 层了,那是不是 service 层的代码也要进行修改呀?

2023-07-02 00:38:05 +08:00
 kachu673

如果数据库后期表字段修改了或者增加了,Mybatis 的实体类、Mapper都要重新生成一遍吗? 甚至一些修改的字段已经侵入到 service 层了,那是不是 service 层的代码也要进行修改? 有没有在不修改原有代码的基础上进行扩展的方法? 代码新人,一点小小的疑惑,勿喷。

2820 次点击
所在节点    Java
22 条回复
Alphones
2023-07-02 00:44:01 +08:00
就是因为这样所以才讨厌改需求,所以实际设计数据库过程,都会考虑增加备用字段,如果是有类似于经常改动的需求,就用非关系型数据库完事
Erroad
2023-07-02 00:49:21 +08:00
不能砸地基。改动小就保留原有字段,更新 Entity Mapper 基本没事;改动大,就迁移到新表,旧的 Service 就废弃了。
做需求嘛,就是改数据库和代码。
mmdsun
2023-07-02 00:51:55 +08:00
用 Mybatis Plus 或者 JPA 吧。类加字段就好。mybatis 默认的生成器 xml, Mapper 很多写死的代码和类型。
timepast
2023-07-02 00:52:02 +08:00
是的。但是 service 层不应该隔离开么
Rocketer
2023-07-02 00:59:45 +08:00
加字段?我们这儿根本不用程序员骂,DBA 就能给你挡得死死的了。程序员想加个字段都跟杀 DBA 他全家似的,更何况需求方?😈
freefcw
2023-07-02 01:37:39 +08:00
这世界本身就是变化的
需求跟随变化
代码就应该能响应变化,否则就会被淘汰


数据库的字段这些属于具体的实现了,我们要面对的是抽象,不是具体的细节

要知道不是面向数据库编程,而是面对业务
yuanmomo
2023-07-02 02:49:43 +08:00
从来没有遇到过字段(名称和类型)要修改的问题,一般修改长度 OK ,这个应该是大忌。

然后新增字段很正常,我的做法是自动生成。然后自己扩展过 mybatis 的 generator 插件,可以自动做合并。
dayeye2006199
2023-07-02 04:43:00 +08:00
这不是 migration 框架处理的问题吗,这个也属于正常需求
chihiro2014
2023-07-02 10:08:10 +08:00
JPA 改 entity 就好了
knightdf
2023-07-02 11:02:31 +08:00
用 jooq 就好了,随便改,反正类型安全会报错
写到 xml 里还得一个个去对
murmur
2023-07-02 11:12:59 +08:00
我见过某些人设计的表一下留了 10 个备用字段
daimubai
2023-07-02 12:40:00 +08:00
你想编写一次,到处运行?
zengguibo
2023-07-02 12:59:02 +08:00
我见过有一个表有两百多个字段,几十个索引,2000 多万的数据量,几乎每两周就要增加一个字段,技术负责人还不允许预留字段,加一个字段就需要从 countroller 开始一直加到 Mapper ,出错了就被骂
kachu673
2023-07-02 13:36:08 +08:00
@zengguibo 曾经也有过这样的经历,当时我数据库设计的有问题,导致后面开发不得不频繁修改数据库。后面我直接多加了几个 varchar 字段当备用字段,完美解决字段不足的问题。
kachu673
2023-07-02 13:36:56 +08:00
@mmdsun 那自动生成的 mapper 和 service 不用修改了是吧?
rioufbi
2023-07-02 19:24:32 +08:00
@Rocketer 字段合理不?长度合适不?别一上来就 varchar(2048),text ,blob 什么的。如果是的话看到是挺讨厌的。还是说 DBA 还要给写 SQL ?写 SQL 直接写*?还是说口径是 DBA 那边出?
mmdsun
2023-07-02 19:34:54 +08:00
@kachu673 是的,不需要改。
chendy
2023-07-02 19:44:14 +08:00
> Mybatis 的实体类、Mapper 都要重新生成一遍吗?

要,如果用了 mybatis plus 之类的东西也许不用

> 甚至一些修改的字段已经侵入到 service 层了,那是不是 service 层的代码也要进行修改?
既然侵入到 service 了那就要改喽

> 有没有在不修改原有代码的基础上进行扩展的方法?
有,用 map 或者 object (逃)

加字段往往是为了支撑更复杂的业务,既然是扩展业务那么改 service 也就理所应当了…
layxy
2023-07-03 09:48:07 +08:00
只加字段,不删字段,不改字段,要不然你上线都没法平滑上线
waytodelay
2023-07-03 10:02:23 +08:00
@kachu673 这个备用字段名字怎么办?能对应上需求吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/953353

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX