使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型
生活随笔
收集整理的這篇文章主要介紹了
使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
postgres里的json格式
我們在使用postgres數據庫時會使用到json格式來存放一些格式不固定的字段,postgres支持json和jsonb兩種格式,兩者的區別以后再說,今天說一下結合mybatis的使用方法:
- 1. typeHandler的實現
mybatis默認是沒有實現json類型字段對應的TypeHandler,所以一般我們需要自定義mybatis的TypeHandler:
json類型字段對應的TypeHandler的一個簡單實現:
jsonb類型字段對應的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 JsonbTypeHandler extends BaseTypeHandler <Object> {private static final PGobject jsonObject = new PGobject();@Overridepublic void setNonNullParameter(PreparedStatement preparedStatement, int i, Object o, JdbcType jdbcType) throws SQLException {jsonObject.setType("jsonb");jsonObject.setValue(JsonUtil.toJsonString(o));preparedStatement.setObject(i,jsonObject);}@Overridepublic Object getNullableResult(ResultSet resultSet, String s) throws SQLException {if(null != resultSet.getString(s)){return JsonUtil.fromJson(resultSet.getString(s), Object.class);}return null ;}@Overridepublic Object getNullableResult(ResultSet resultSet, int i) throws SQLException {if(null != resultSet.getString(i)){return JsonUtil.fromJson(resultSet.getString(i), Object.class);}return null ;}@Overridepublic Object getNullableResult(CallableStatement callableStatement, int i) throws SQLException {if(null != callableStatement.getString(i)){return JsonUtil.fromJson(callableStatement.getString(i), Object.class);}return null ;} }- 2.mapper.xml文件中的配置
注意在insert和update語句等用到json字段的屬性都要手動去引用自定義的typeHandler。
<insert id="insert" parameterType="com.jun.test.mapper.entity.EventLog">insert into ec.event_log (uuid, device_name, resource_name, status, extend)values (#{uuid,jdbcType=VARCHAR},#{deviceName,jdbcType=VARCHAR}, #{status,jdbcType=SMALLINT}, #{extend,jdbcType=OTHER,typeHandler=com.jun.test.handler.JsonTypeHandler})</insert>想要進行解析時,可以獲取到該Object對象后,先轉成json字符串,再轉成對應的對象,如下:
Extend extend = JsonUtil.parser(JsonUtil.toJson(eventLog.getExtend ()), Extend .class);總結
以上是生活随笔為你收集整理的使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中多态父类的成员变量和方法调用问
- 下一篇: 面向切面编程AOP的最佳入门示例