如果数据库后期表字段修改了或者增加了, Mybatis 的实体类、Mapper 都要重新生成一遍吗?甚至一些修改的字段已经侵入到 service 层了,那是不是 service 层的代码也要进行修改呀? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kachu673
V2EX    Java

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

  •  1
     
  •   kachu673 2023-07-02 00:38:05 +08:00 3334 次点击
    这是一个创建于 837 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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


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

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

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

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

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

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

    加字段往往是为了支撑更复杂的业务,既然是扩展业务那么改 service 也就理所应当了…
    layxy
        19
    layxy  
       2023-07-03 09:48:07 +08:00
    只加字段,不删字段,不改字段,要不然你上线都没法平滑上线
    waytodelay
        20
    waytodelay  
       2023-07-03 10:02:23 +08:00
    @kachu673 这个备用字段名字怎么办?能对应上需求吗?
    kachu673
        21
    kachu673  
    OP
       2023-07-03 15:49:27 +08:00
    @waytodelay 备用字段,自然对不上需求
    iiain
        22
    iiain  
       2023-07-04 14:39:37 +08:00
    改 entity 和 mapper
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5131 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 09:25 PVG 17:25 LAX 02:25 JFK 05:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86