Оглавление
1. Предварительное резюме
1.1 Среда поддержки
Поддержка базы данных: для версии MySql требуется 5.7+
1.2 Сценарии спроса
При использовании хранилища базы данных MySQL из-за бизнес-требований определенные поля в классах сущностей должны использовать настраиваемые типы или типы списка и карты.
2. Реализация потребностей
2.1 Нестандартные типы данных, Список, Карта
Во-первых: добавьте в поле класса сущностей, которое необходимо преобразовать:
@TableField(typeHandler = JacksonTypeHandler.class)
Далее: Измените @TableName в классе сущностей
@TableName(value = "数据库表名",autoResultMap = true)
2.2 Пользовательский тип данных
Импорт зависимостей:
<properties>
<jackson-core.version>2.12.6</jackson-core.version>
<jackson-databind.version>2.12.7.1</jackson-databind.version>
<jackson-annotations.version>2.15.2</jackson-annotations.version>
</properties>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${
jackson-core.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${
jackson-databind.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${
jackson-annotations.version}</version>
</dependency>
Сначала определите класс инструмента обработки данных:
@Component
public class ObjectToJackson {
private static ObjectMapper mapper;
@Resource
public void setMapper(ObjectMapper mapper) {
ObjectToJackson.mapper = mapper;
}
public static <T> String objectToJson(T o) {
try {
return ObjectToJackson.mapper.writeValueAsString(o);
} catch (Exception e) {
e.printStackTrace();
throw new ServerException(500);
}
}
public static <T> T jsonToObject(String s, TypeReference<T> typeReference) {
if (s == null) {
return null;
}
try {
return ObjectToJackson.mapper.readValue(s, typeReference);
} catch (JsonProcessingException e) {
e.printStackTrace();
throw new ServerException(500);
}
}
}
Затем определите свои собственные правила преобразования:
public class ObjectToJacksonHandler extends BaseTypeHandler<Object> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
String json = ObjectToJackson.objectToJson(parameter);
ps.setString(i, json);
}
@Override
public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {
String string = rs.getString(columnName);
return ObjectToJackson.jsonToObject(string, new TypeReference<>() {
});
}
@Override
public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String string = rs.getString(columnIndex);
return ObjectToJackson.jsonToObject(string, new TypeReference<>() {
});
}
@Override
public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String string = cs.getString(columnIndex);
return ObjectToJackson.jsonToObject(string, new TypeReference<>() {
});
}
}
использовать:
@TableName(value = "数据库表名", autoResultMap = true)
@TableField(typeHandler = ObjectToJacksonHandler.class)