使用mybatis中的自訂TypeHandler處理PostgreSQL中的Json類型欄位

來源:互聯網
上載者:User

標籤:extend   value   配置   映射   new   tst   map   oid   throw   

業務擴充欄位在PostgreSQL資料庫中經常會使用json格式的資料來儲存,然而mybatis預設是沒有實現json類型欄位對應的TypeHandler,所以一般我們需要自訂mybatis的TypeHandler。

如下是mybatis中json類型欄位對應的TypeHandler的一個簡單實現:

import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;import org.apache.ibatis.type.MappedTypes;import org.postgresql.util.PGobject;import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;@MappedTypes({Object.class})public class JsonTypeHandler extends BaseTypeHandler<Object> {    private static final PGobject jsonObject = new PGobject();    @Override    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws            SQLException {        jsonObject.setType("json");        jsonObject.setValue(JsonUtil.toJsonString(o));        preparedStatement.setObject(i, jsonObject);    }    @Override    public Object getNullableResult(ResultSet resultSet, String s) throws SQLException {        return JsonUtil.fromJson(resultSet.getString(s), Object.class);    }    @Override    public Object getNullableResult(ResultSet resultSet, int i) throws SQLException {        return JsonUtil.fromJson(resultSet.getString(i), Object.class);    }    @Override    public Object getNullableResult(CallableStatement callableStatement, int i) throws SQLException {        return JsonUtil.fromJson(callableStatement.getString(i), Object.class);    }}

除了編寫TypeHandler外,還需要在xml對應檔中做如下配置:

    <resultMap id="BaseResultMap" type="com.test.entity.EventLog">        <id column="uuid" jdbcType="VARCHAR" property="uuid"/>        <result column="payload" jdbcType="OTHER" property="payload" typeHandler="com.test.dao.typehandler.JsonTypeHandler"/>    </resultMap>
    <insert id="insert" parameterType="com.test.entity.EventLog">        insert into "test".event_log (uuid,payload)        values (#{uuid,jdbcType=VARCHAR},#{payload,jdbcType=OTHER,typeHandler=com.test.dao.typehandler.JsonTypeHandler})    </insert>

使用時,擷取到該Object對象後,可先轉成json字串,再轉成對應的對象,如下:

        EventLogPayload eventLogPayload = JsonUtil.parser(JsonUtil.toJson(eventLog.getPayload()), EventLogPayload.class);

 

使用mybatis中的自訂TypeHandler處理PostgreSQL中的Json類型欄位

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.