千家信息网

MyBatis数据库字段该如何映射Java枚举

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"MyBatis数据库字段该如何映射Java枚举",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"MyBatis数据库字段该如何映射Java枚
千家信息网最后更新 2026年11月02日MyBatis数据库字段该如何映射Java枚举

本篇内容主要讲解"MyBatis数据库字段该如何映射Java枚举",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"MyBatis数据库字段该如何映射Java枚举"吧!

有时候我们需要将数据库的字段对Java的枚举类型进行映射,比如说我们有一个汽车配件类型的枚举

public enum ProductType implements Localisable {TYPE1("配件"),    TYPE2("车品");    private String value;    private ProductType(String value) {this.value = value;    }@Override    public String getValue() {return this.value;    }}

该枚举类型实现了一个接口

public interface Localisable {    String getValue();}

有一个配件分类的实体类,包含了该枚举字段(此处只包含部分字段属性)

/** * 配件分类 */@AllArgsConstructor@NoArgsConstructorpublic class ProviderProductLevel {@Getter    @Setter    private Long id;    @Getter    @Setter    private String code;    @Getter    @Setter    private String name;    @Getter    @Setter    private Integer sort;    @Getter    @Setter    private Integer level;    @Getter    @Setter    private ProductType productType;    @Getter    @Setter    private String pictureUrl;}

而在数据库中的表结构如下

dao方法如下(通过id查找一个配件分类,并实例化)

@Mapperpublic interface LevelDao {    ProviderProductLevel findLevel1(Long id);}

mapper映射文件如下

                                                    

我们可以看到这里有一个映射处理器typeHandler="com.cloud.productprovider.untils.DbEnumTypeHandler"

该映射处理器的代码如下

@AllArgsConstructorpublic class DbEnumTypeHandler extends BaseTypeHandler {private Class type;    @Override    public void setNonNullParameter(PreparedStatement ps, int i, Localisable parameter, JdbcType jdbcType) throws SQLException {        ps.setString(i,parameter.getValue());    }@Override    public Localisable getNullableResult(ResultSet rs, String columnName) throws SQLException {        String value = rs.getString(columnName);        if (rs.wasNull()) {return null;        }else {return convert(value);        }    }@Override    public Localisable getNullableResult(ResultSet rs, int columnIndex) throws SQLException {        String value = rs.getString(columnIndex);        if (rs.wasNull()) {return null;        }else {return convert(value);        }    }@Override    public Localisable getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {        String value = cs.getString(columnIndex);        if (cs.wasNull()) {return null;        }else {return convert(value);        }    }private Localisable convert(String value) {        Localisable[] dbEnums = type.getEnumConstants();        for (Localisable dbEnum : dbEnums) {if (dbEnum.getValue().equals(value)) {return dbEnum;            }        }return null;    }}

经测试返回的结果对象的Json字符串如下

{"code":"0000001","id":1,"name":"油品","productType":"TYPE1","sort":1}

到此,相信大家对"MyBatis数据库字段该如何映射Java枚举"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

字段 数据 数据库 配件 类型 分类 内容 处理器 方法 处理 学习 实用 更深 代码 兴趣 字符 字符串 实体 实例 实用性 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 天津市摩尔互联网科技 中国互联网科技工作委员会毛军 疫情对互联网科技公司影响 哈尔滨秒房互联网科技有限公司 互联网科技公司招聘 农村开互联网科技讲堂 花神(南京)互联网科技有限公司 乌苏新华互联网科技做什么的 科技类公司包括互联网吗 互联网公司黑科技创始人 山东子淼互联网科技有限公司 元气玛特互联网科技公司是外包吗 互联网金融科技公司的优势 工业互联网科技成果转化 抖集互联网科技技术咨询 万物互联网智能科技 青岛易易互联网科技 长沙易易互联网科技有限公司 平安好医生打造互联网科技医疗 瑞安市蟠桃会互联网科技有限公司 科技赋能下的互联网金融 互联网科技巨头监管 腾讯阿里互联网科技 互联网的科技创新 互联网科技股票 杭州互联网科技公司 互联网金融科技平台 玖二柒互联网科技公司待遇 未来五年的互联网科技 互联网科技如何创业
0