渣渣求教, Java 如何通过数据库中字段(动态的)创建实体类( model) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaofdejimo
V2EX    Java

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

  •  
  •   xiaofdejimo 2017-07-05 00:15:15 +08:00 5495 次点击
    这是一个创建于 3046 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    既然要动态,那要屁的实体类,直接 map 得了, 渲染的时候 直接遍历 map,有一个 key 显示一个筛选框。
    solee
        25
    solee  
       2017-07-07 17:45:51 +08:00
    @xiaofdejimo 感觉 mongodb 就是针对这种需求啊~ 你也不用在乎字段 json 随便组合啊
    jalena
        26
    jalena  
       2017-07-10 10:23:57 +08:00
    @zpf124 +1,或者直接 JSON 吧,哪里非得要实体呢?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2853 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 14:02 PVG 22:02 LAX 06:02 JFK 09:02
    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