V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kachu673
V2EX  ›  Java

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

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

    如果数据库后期表字段修改了或者增加了,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   ·   实用小工具   ·   2615 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 03:30 · PVG 11:30 · LAX 19:30 · JFK 22:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.