Список магазинов Mybatis plus, карта

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)

Supongo que te gusta

Origin blog.csdn.net/qq_35241329/article/details/131958350
Recomendado
Clasificación