类型映射
title: 类型映射 description:
特定场景下,需要自定义Java类字段与数据库列之间的类型映射关系
核心类:JavaTypeToDatabaseTypeConverter
JavaTypeToDatabaseTypeConverter
抽象了由java类型与数据库列类型之间进行转换的接口,用户可以在该接口中自定义类型映射关系,从而实现自定义类型映射,其内部有一个JAVA_TO_DB_TYPE_MAPPING
成员变量,存储了所有数据库的类型映射关系。
java
public interface JavaTypeToDatabaseTypeConverter {
Logger log = LoggerFactory.getLogger(JavaTypeToDatabaseTypeConverter.class);
/**
* 类型映射
*/
Map<String, Map<Class<?>, DefaultTypeEnumInterface>> JAVA_TO_DB_TYPE_MAPPING = new HashMap<>();
......
}
方式一:简单添加自定义映射关系
java
@Component
public class AutoTableReadyCallbackListener implements AutoTableReadyCallback {
/**
* 初始化完成回调
*/
@Override
public void ready(final Set<Class<?>> tableClasses) {
// 举例:自定义java类型与数据库类型映射关系
JavaTypeToDatabaseTypeConverter.addTypeMapping(DatabaseDialect.MySQL, Date.class, MySqlDefaultTypeEnum.TIMESTAMP);
}
}
java
// 自定义java类型与数据库类型映射关系
JavaTypeToDatabaseTypeConverter.addTypeMapping(DatabaseDialect.MySQL, Date.class, MySqlDefaultTypeEnum.TIMESTAMP);
// 开始
AutoTableBootstrap.start();
方式二:简单添加自定义映射关系
java
@Component
public class MyJavaTypeToDatabaseTypeConverter implements JavaTypeToDatabaseTypeConverter {
/**
* 初始化完成回调
*/
@Override
public Class<?> getFieldType(final Class<?> clazz, final Field field) {
// 根据 类、字段 进行判断,返回对应数据库类型
if (clazz.getName().equals("com.example.entity.User") && field.getName().equals("createTime")) {
return MySqlDefaultTypeEnum.TIMESTAMP;
}
// 返回null代表,不介入自定义类型的逻辑
return null;
}
}
java
// 自定义java类型与数据库类型映射关系
AutoTableGlobalConfig.setJavaTypeToDatabaseTypeConverter(new JavaTypeToDatabaseTypeConverter() {
@Override
public Class<?> getFieldType(Class<?> clazz, Field field) {
// 根据 类、字段 进行判断,返回对应数据库类型
if (clazz.getName().equals("com.example.entity.User") && field.getName().equals("createTime")) {
return MySqlDefaultTypeEnum.TIMESTAMP;
}
// 返回null代表,不介入自定义类型的逻辑
return null;
}
});
// 开始
AutoTableBootstrap.start();
方式三:完全自定义类型映射关系
java
public class MyJavaTypeToDatabaseTypeConverter implements JavaTypeToDatabaseTypeConverter {
/**
* 初始化完成回调
*/
@Override
public DatabaseTypeAndLength convert(String databaseDialect, Class<?> clazz, Field field) {
// 根据 数据源类型、类、字段 进行判断,返回对应数据库类型
......
// 返回null代表,不介入自定义类型的逻辑
return null;
}
}