xiaofdejimo
V2EX  ›  Java

渣渣求教, Java 如何通过数据库中字段(动态的)创建实体类( model)

  •  
  •   xiaofdejimo · Jul 5, 2017 · 5824 views
    This topic created in 3262 days ago, the information mentioned may be changed or developed.

    因为数据库里表的字段是动态的,每次用的时候想根据字段反过来动态的生成实体类,不是静态的可以直接写一个实体类做映射关系就行,求教大腿用反射怎么写

    26 replies    2017-07-10 10:23:57 +08:00
    xiaofdejimo
        1
    xiaofdejimo  
    OP
       Jul 5, 2017
    就是 Json Gen 这个网站的功能,具体是怎么实现的?
    <a href="http://jsongen.byingtondesign.com/">jsongen</a>
    Lonely
        2
    Lonely  
       Jul 5, 2017
    你是要在程序运行时根据表字段动态生成类?
    zhangbohun
        3
    zhangbohun  
       Jul 5, 2017 via Android
    用 map 不知道行不行?
    Kilerd
        4
    Kilerd  
       Jul 5, 2017 via iPhone
    工厂模式生产出来啊
    SaltedFish12138
        5
    SaltedFish12138  
       Jul 5, 2017 via Android
    我觉得用 fastjson 应该能满足你的需求。只是不知道除了属性,楼主对实体类有什么其他的要求没?
    ixiaohei
        6
    ixiaohei  
       Jul 5, 2017
    mybatis 好像有这个功能,根据字段的值反射不同的实体。另外感觉你数据库模式设计有问题,后面会很难维护的。
    peoce
        7
    peoce  
       Jul 5, 2017
    licht114
        8
    licht114  
       Jul 5, 2017
    eclipse 有反向生成。
    paragon
        9
    paragon  
       Jul 5, 2017
    mybatis generator 不谢~
    em84
        10
    em84  
       Jul 5, 2017
    逆向工程?
    solee
        11
    solee  
       Jul 5, 2017
    @paragon 那个只能算生成,也是静态的。我理解的动态是数据库改了字段,程序自己就可以生成 model。这个高大上的技术,还没听过~
    zpf124
        12
    zpf124  
       Jul 5, 2017
    @solee 你这个想法非常诡异啊, 动态的运行中也会随时更新实体类? 你代码怎么写?

    你之前 有个文章的表 ,写了一个字段 content, 结果因为显示界面结构变了, 数据库改成了 title,directions。
    你怎么自动生成? 实体类动态生成了,页面展示不出来了怎么处理器? 难道连页面也自动生成?
    smithtel
        13
    smithtel  
       Jul 5, 2017 via Android
    设计有问题,为何要语言去修正
    jalena
        14
    jalena  
       Jul 5, 2017
    我在纠结什么样的系统会频繁的修改字段?
    pengfei
        15
    pengfei  
       Jul 5, 2017
    怎么感觉原先的设计是基于缓存或 ES 的,后改成数据库了 -,-
    bk201
        16
    bk201  
       Jul 5, 2017
    @xiaofdejimo Json Gen 这个不就是普通的文本语义处理?
    hwding
        17
    hwding  
       Jul 5, 2017
    是不是只能 asm.jar 了
    hwding
        18
    hwding  
       Jul 5, 2017
    The only required component to generate a class is the `ClassWriter` compo-
    nent.
    Librazy
        19
    Librazy  
       Jul 5, 2017
    或许你需要 javac 和一个支持动态 load/reload 的 classloader?
    大概是现场编译一个加载进来反射着玩……
    solee
        20
    solee  
       Jul 5, 2017
    @zpf124 所以啊 我觉得楼主标题很迷惑,如果只是生成 model 那工具太多啦~ 很久没接触过 java 了,还以为又进化出什么很黑科技的技术,哈哈~

    楼主说的:“因为数据库里表的字段是动态的,每次用的时候想根据字段反过来动态的生成实体类”

    也就是说每次生成一次 model 再 run
    ihuotui
        21
    ihuotui  
       Jul 5, 2017 via iPhone
    用 eav 设计或者 json ?既然动态数据就动态保存啊
    xiaofdejimo
        22
    xiaofdejimo  
    OP
       Jul 7, 2017
    @zpf124
    @solee
    @jalena
    solee 理解的没错,因为系统是对内部的系统,数据分析人员会改动表结构,而其他员工又需要在前端筛选数据,所以实体类不能写死,得动态生成出来给 service 用,我也很惆怅啊
    xiaofdejimo
        23
    xiaofdejimo  
    OP
       Jul 7, 2017
    @ixiaohei
    本身因为表都不是自动维护,是数据分析的人做完分析再改动,所以后端就得做成动态的,我也很惆怅啊
    zpf124
        24
    zpf124  
       Jul 7, 2017
    @xiaofdejimo 神经病需求啊.... 那前端筛选项怎么自动渲染,怎么获取实体类的属性名? 反射?

    既然要动态,那要屁的实体类,直接 map 得了, 渲染的时候 直接遍历 map,有一个 key 显示一个筛选框。
    solee
        25
    solee  
       Jul 7, 2017
    @xiaofdejimo 感觉 mongodb 就是针对这种需求啊~ 你也不用在乎字段 json 随便组合啊
    jalena
        26
    jalena  
       Jul 10, 2017
    @zpf124 +1,或者直接 JSON 吧,哪里非得要实体呢?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1385 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 17:09 · PVG 01:09 · LAX 10:09 · JFK 13:09
    ♥ Do have faith in what you're doing.