V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
t298
V2EX  ›  程序员

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

  •  
  •   t298 · 3 天前 · 1093 次点击

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

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

    @ChovyChu 能具体一些嘛

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

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

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