重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容主要讲解“MyBatis数据库字段该如何映射Java枚举”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MyBatis数据库字段该如何映射Java枚举”吧!
成都创新互联公司是一家专业提供加格达奇企业网站建设,专注与网站建设、成都网站设计、HTML5建站、小程序制作等业务。10年已为加格达奇众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
有时候我们需要将数据库的字段对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枚举”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!