自定义Mybatis的TypeHandler,轻松应对Mysql的JSON类型
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import com.alibaba.fastjson.JSON;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JsonTypeHandler<T> extends BaseTypeHandler<T> {
private Class<T> type;
public JsonTypeHandler(Class<T> type) {
if (type == null) throw new IllegalArgumentException("Type argument cannot be null");
this.type = type;
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, JSON.toJSONString(parameter));
}
@Override
public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
return this.parse(rs.getString(columnName));
}
@Override
public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return this.parse(rs.getString(columnIndex));
}
@Override
public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return this.parse(cs.getString(columnIndex));
}
private T parse(String json) {
if (json == null || json.length() == 0) {
return null;
}
return JSON.parseObject(json, type);
}
}
这个代码实例展示了如何创建一个自定义的TypeHandler来处理MyBatis与MySQL中的JSON类型数据。它使用了阿里巴巴的FastJSON库来序列化和反序列化JSON数据。这个例子简洁明了,并且提供了必要的注释。
评论已关闭