xiaofdejimo
V2EX  ›  Java

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

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

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

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

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

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

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

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