添加 jsonb 字段的处理
This commit is contained in:
22
pom.xml
22
pom.xml
@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>ltd.llvy</groupId>
|
||||
<artifactId>handler</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<version>1.0.2</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
@ -45,9 +45,29 @@
|
||||
<artifactId>postgis-jdbc</artifactId>
|
||||
<version>2.5.1</version>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310 -->
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||
<artifactId>jackson-datatype-jsr310</artifactId>
|
||||
<version>2.19.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>central</id>
|
||||
<url>https://maven.aliyun.com/repository/public</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>jitpack.io</id>
|
||||
<url>https://jitpack.io</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>gitea</id>
|
||||
<url>https://www.llvy.ltd/api/packages/llvy.ltd/maven</url>
|
||||
|
80
src/main/java/ltd/llvy/postgis/handler/JsonbTypeHandler.java
Normal file
80
src/main/java/ltd/llvy/postgis/handler/JsonbTypeHandler.java
Normal file
@ -0,0 +1,80 @@
|
||||
package ltd.llvy.postgis.handler;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
import java.sql.CallableStatement;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import org.apache.ibatis.type.BaseTypeHandler;
|
||||
import org.apache.ibatis.type.JdbcType;
|
||||
import org.apache.ibatis.type.MappedJdbcTypes;
|
||||
import org.apache.ibatis.type.MappedTypes;
|
||||
import org.postgresql.util.PGobject;
|
||||
|
||||
/**
|
||||
* (JsonbTypeHandler)
|
||||
*
|
||||
* @author zweiandlen
|
||||
* @since 2025/6/4 16:30
|
||||
*/
|
||||
@MappedTypes({JsonNode.class})
|
||||
@MappedJdbcTypes(JdbcType.JAVA_OBJECT)
|
||||
public class JsonbTypeHandler extends BaseTypeHandler<JsonNode> {
|
||||
|
||||
private static final PGobject JSON_OBJECT;
|
||||
|
||||
private static final ObjectMapper OBJECT_MAPPER;
|
||||
|
||||
static {
|
||||
JSON_OBJECT = new PGobject();
|
||||
//
|
||||
OBJECT_MAPPER = new ObjectMapper();
|
||||
// 禁用日期作为时间戳的序列化方式
|
||||
OBJECT_MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
||||
// 注册Java 8时间模块
|
||||
OBJECT_MAPPER.registerModule(new JavaTimeModule());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNonNullParameter(
|
||||
PreparedStatement ps, int i, JsonNode parameter, JdbcType jdbcType) throws SQLException {
|
||||
JSON_OBJECT.setType("jsonb");
|
||||
JSON_OBJECT.setValue(toJson(parameter));
|
||||
ps.setObject(i, JSON_OBJECT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonNode getNullableResult(ResultSet rs, String columnName) throws SQLException {
|
||||
return parse(rs.getString(columnName));
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonNode getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
|
||||
return parse(rs.getString(columnIndex));
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonNode getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
|
||||
return parse(cs.getString(columnIndex));
|
||||
}
|
||||
|
||||
private JsonNode parse(String json) {
|
||||
try {
|
||||
return OBJECT_MAPPER.readValue(json, JsonNode.class);
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private String toJson(Object obj) {
|
||||
try {
|
||||
return OBJECT_MAPPER.writeValueAsString(obj);
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user