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);
}
}