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

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

  •  1
     
  •   kachu673 · 300 天前 · 2515 次点击
    这是一个创建于 300 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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


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

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

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

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

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

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

    加字段往往是为了支撑更复杂的业务,既然是扩展业务那么改 service 也就理所应当了…
    layxy
        19
    layxy  
       299 天前
    只加字段,不删字段,不改字段,要不然你上线都没法平滑上线
    waytodelay
        20
    waytodelay  
       299 天前
    @kachu673 这个备用字段名字怎么办?能对应上需求吗?
    kachu673
        21
    kachu673  
    OP
       299 天前
    @waytodelay 备用字段,自然对不上需求
    iiain
        22
    iiain  
       298 天前
    改 entity 和 mapper
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2823 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 10:02 · PVG 18:02 · LAX 03:02 · JFK 06:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.