Java 在导出数据的时候,数据库存的是 1, 2, 3 这样的数字,实际上的业务对应的是汉字,应该怎么导出数据呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
t298
V2EX    程序员

Java 在导出数据的时候,数据库存的是 1, 2, 3 这样的数字,实际上的业务对应的是汉字,应该怎么导出数据呢?

a href="Javascript:" Onclick="upVoteTopic(1112342);" class="vote">
  •  
  •   t298 301 天前 2021 次点击
    这是一个创建于 301 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如一个站点类型,是通过系统上的字典绑定的,比如 1 对应类型 a ,2 对应类型 b 这样。页面上显示的肯定是类型 a,b,c 。数据库里存的是 1/2/3 。现在涉及到导出数据的话,应该怎么导出的时候做处理呢?

    18 条回复    2025-02-19 17:01:14 +08:00
    evan1
        1
    evan1  
    PRO
       301 天前
    找下数据库到页面显示时相关的转换代码,导出的时候复用下。
    ChovyChu
        2
    ChovyChu  
       301 天前
    写个注解,导出时转换
    evan1
        3
    evan1  
    PRO
       301 天前
    @evan1 #1 如果是直接从数据库导出的话可以导出后对数据进行一下二次处理,还是复用数据库到页面显示相关的转换代码。
    YJi
        4
    YJi  
       301 天前
    之前需要导出表格,用的 easyexcel ,然后可以根据属性自定义 converter 。
    t298
        5
    t298  
    OP
       301 天前
    @evan1 目前是把查询字典的接口给到前端,前端在展示的时候处理。

    @ChovyChu 能具体一些嘛

    @YJi 我也去看看这个。
    L0L
        6
    L0L  
       301 天前
    哈哈哈,我见过直接 case 转换的,在 sql 里直接转换,出结果
    Plutooo
        7
    Plutooo  
       301 天前
    用最笨的方法,后端也存一套枚举,然后 forEach 操作
    t298
        8
    t298  
    OP
       301 天前
    @L0L
    @Plutooo 那要是新加字典名称,或者改一下。那不就炸了
    iyiluo
        9
    iyiluo  
       301 天前
    懒得写代码可以直接复制一份表,直接用 sql 把枚举字段替换掉,导出复制表
    Cestbonmmm
        10
    Cestbonmmm  
       301 天前
    用最笨的方法,后端也存一套枚举,然后 forEach 操作 +1
    不用怕字典变动,有 gpt 生成。导出 Excel 的需求变得也快,不要过度设计
    L0L
        11
    L0L  
       301 天前
    @t298 接着改 sql 啊,或者不怕 sql 注入,直接 mybatis 硬拼接字典值进去,形成一个动态拼接的代码。但是不建议这么搞啊,要被吐槽的。
    shen13176101
        12
    shen13176101  
       301 天前
    听你的描述,sql 关联字典表,就能实现了。那里还会有问题呢
    FawkesV
        13
    FawkesV  
       301 天前
    维护专门的字典表。
    然后写一个反序列化的注解 DictTranslate
    然后写一个反序列化实现:class DictSerializer extends JsonSerializer<String> implements ContextualSerializer
    返回的时候直接在原本的 type 增加 typeName 字段做展示 。
    yinmin
        14
    yinmin  
       301 天前 via iPhone
    如果编码固定基本不变(不是部署后可维护的字典表),就让前端写一个 class method ,输入编码输出文字 switch case 写死在代码里。就是有几个 class 下面有一堆的 method 专门将编码转换成文字(硬编码)。如果前端比较糙,或者不想让用户获取到完整字典表,class method 硬编码写在后端也行。

    如果是部署后可维护的字典表,数据库 join 后,编号和对应文字同时传给前端。
    yinmin
        15
    yinmin  
       301 天前 via iPhone
    @t298 #5 字典表查询接口给前端,前端要疯掉了,假设服务器在北京,用户在海南,延时 50ms ,前端调一次接口 50ms ,界面可能有几十上百个编码转换文字,如果调用几十上百次光延时就够呛,一个界面调用字典表查询接口的次数像是 ddos 攻击了。

    要么 api 同时将编码和文字发给前端,要么就把编码文字对照表 json 一次性发给前端,或者给前端一个 word/excel 让前端硬编码。
    yinmin
        16
    yinmin  
       301 天前 via iPhone
    后端程序与数据库交互一次 5ms-30ms (数据汇总可能更长时间);前端与后端交互一次 10ms-100ms ,每 100kb 数据再加 100ms-1 秒。 一个界面会有几次前端-后端-数据库交互,大致能方案算出行不行。
    Sum0l
        17
    Sum0l  
       300 天前
    数据翻译框架,国内有开源项目。https://easy-trans.dromara.org/
    tangxueming13
        18
    tangxueming13  
       300 天前
    1.sql case (看场景是否适用)
    2. 服务端 converter (很优雅)
    3. 数据库直接加一列 (以前 leader 说过, 要学会冗余,别整天范式)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3215 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 04:56 PVG 12:56 LAX 20:56 JFK 23:56
    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