91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MyBatis數據庫字段該如何映射Java枚舉

發布時間:2021-08-24 10:52:54 來源:億速云 閱讀:477 作者:chen 欄目:大數據

本篇內容主要講解“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;
}

而在數據庫中的表結構如下

MyBatis數據庫字段該如何映射Java枚舉

dao方法如下(通過id查找一個配件分類,并實例化)

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

mapper映射文件如下

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.cloud.productprovider.dao.LevelDao">    <resultMap id="level1Map" type="com.cloud.productprovider.composite.ProviderProductLevel">        <id property="id" column="id" />        <result property="code" column="code" />        <result property="name" column="name" />        <result property="sort" column="sort" />        <result property="productType" column="product_type" typeHandler="com.cloud.productprovider.untils.DbEnumTypeHandler" />    </resultMap>    <select id="findLevel1" resultMap="level1Map" parameterType="java.lang.Long"            resultType="com.cloud.productprovider.composite.ProviderProductLevel">        select id,code,name,sort,product_type from product_level<where>            id=#{id}</where>    </select></mapper>

我們可以看到這里有一個映射處理器typeHandler="com.cloud.productprovider.untils.DbEnumTypeHandler"

該映射處理器的代碼如下

@AllArgsConstructorpublic class DbEnumTypeHandler extends BaseTypeHandler<Localisable> {private Class<Localisable> 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枚舉”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

年辖:市辖区| 云和县| 敦煌市| 青州市| 禹州市| 汤阴县| 石台县| 乐平市| 通化市| 竹北市| 商丘市| 五常市| 堆龙德庆县| 东源县| 郑州市| 类乌齐县| 福清市| 徐闻县| 昌黎县| 太和县| 黄陵县| 孙吴县| 桓台县| 青川县| 镇康县| 崇左市| 郯城县| 邵阳市| 始兴县| 即墨市| 瑞安市| 保德县| 古交市| 彰化县| 修武县| 灯塔市| 宝鸡市| 岳阳县| 通渭县| 宿州市| 大渡口区|