java中使用pgsql的json類型CRUD

java po類:
private Object labReportBO;

數據庫類型:
lab_report_bo JSON;

mapper.xml

<resultMap id="BaseResultMap" type="common.entity.po.ScCountQueue" >
	<result column="LAB_REPORT_BO" property="labReportBO" jdbcType="OTHER" typeHandler="com.highershine.website.common.converter.JSONTypeHandlerPg" />
</resultMap>

 #{labReportBO, jdbcType=OTHER, typeHandler=com.highershine.website.common.converter.JSONTypeHandlerPg}

轉換器

package common.converter;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
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.io.IOException;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @Description:  自定義JsonTypeHandler處理PostgreSQL的JSON數據類型
 */
@Slf4j
@MappedTypes(Object.class)
public class JSONTypeHandlerPg extends BaseTypeHandler<Object> {
    //引入PGSQL提供的工具類PGobject
    private static final PGobject JSON_OBJECT = new PGobject();

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
        JSON_OBJECT.setType("json");
        try {
            //java對象轉化成json字符串
            JSON_OBJECT.setValue(new ObjectMapper().writeValueAsString(parameter));
        } catch (IOException e) {
            log.error("JSONTypeHandlerPg.setNonNullParameter出錯!", e);
        }
        ps.setObject(i, JSON_OBJECT);
    }

    @Override
    public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return rs.getString(columnName);
    }

    @Override
    public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return rs.getString(columnIndex);
    }

    @Override
    public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return cs.getString(columnIndex);
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章