From 4de03cf60a83aa23fd15446d2f4c6040669e550d Mon Sep 17 00:00:00 2001 From: Timi Date: Thu, 6 Nov 2025 14:10:23 +0800 Subject: [PATCH] add mybatis GsonHandler --- .../imyeyu/spring/handler/GsonHandler.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/main/java/com/imyeyu/spring/handler/GsonHandler.java diff --git a/src/main/java/com/imyeyu/spring/handler/GsonHandler.java b/src/main/java/com/imyeyu/spring/handler/GsonHandler.java new file mode 100644 index 0000000..2260f53 --- /dev/null +++ b/src/main/java/com/imyeyu/spring/handler/GsonHandler.java @@ -0,0 +1,57 @@ +package com.imyeyu.spring.handler; + +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.imyeyu.java.TimiJava; +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * MySQL JSON 数据类型处理器 + * + * @author 夜雨 + * @since 2021-07-04 09:36 + */ +public class GsonHandler extends BaseTypeHandler { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, JsonElement parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, parameter.toString()); + } + + @Override + public JsonElement getNullableResult(ResultSet rs, String columnName) throws SQLException { + return toElement(rs.getString(columnName)); + } + + @Override + public JsonElement getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return toElement(rs.getString(columnIndex)); + } + + @Override + public JsonElement getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return toElement(cs.getNString(columnIndex)); + } + + private JsonElement toElement(String json) { + if (TimiJava.isNotEmpty(json)) { + JsonElement el = JsonParser.parseString(json); + if (el.isJsonObject()) { + return el.getAsJsonObject(); + } + if (el.isJsonArray()) { + return el.getAsJsonArray(); + } + if (el.isJsonPrimitive()) { + return el.getAsJsonPrimitive(); + } + } + return null; + } +}