类型映射
特定场景下,需要自定义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();
方式二:简单添加自定义映射关系 ^2.3.4
java
@Component
public class MyJavaTypeToDatabaseTypeConverter implements JavaTypeToDatabaseTypeConverter {
/**
* 直接切换指定的数据类型
*/
@Override
public DefaultTypeEnumInterface getSqlType(String databaseDialect, Class<?> clazz, Field field) {
// 根据 类、字段 进行判断,返回对应数据库类型
if (databaseDialect.equals(DatabaseDialect.MySQL) &&
clazz.getName().equals("com.example.entity.User") &&
field.getName().equals("createTime")) {
return MySqlDefaultTypeEnum.TIMESTAMP;
}
// 其他情况执行默认逻辑
return JavaTypeToDatabaseTypeConverter.super.getSqlType(databaseDialect, clazz, field);
}
}
java
// 自定义java类型与数据库类型映射关系
AutoTableGlobalConfig.setJavaTypeToDatabaseTypeConverter(new JavaTypeToDatabaseTypeConverter() {
/**
* 直接切换指定的数据类型
*/
@Override
public DefaultTypeEnumInterface getSqlType(String databaseDialect, Class<?> clazz, Field field) {
// 根据 类、字段 进行判断,返回对应数据库类型
if (databaseDialect.equals(DatabaseDialect.MySQL) &&
clazz.getName().equals("com.example.entity.User") &&
field.getName().equals("createTime")) {
return MySqlDefaultTypeEnum.TIMESTAMP;
}
// 其他情况执行默认逻辑
return JavaTypeToDatabaseTypeConverter.super.getSqlType(databaseDialect, clazz, field);
}
});
// 开始
AutoTableBootstrap.start();
方式三:完全自定义类型映射关系
java
public class MyJavaTypeToDatabaseTypeConverter implements JavaTypeToDatabaseTypeConverter {
/**
* 完全自定义类型转换逻辑,包括解析注解的逻辑
*/
@Override
public DatabaseTypeAndLength convert(String databaseDialect, Class<?> clazz, Field field) {
// 根据 数据源类型、类、字段 进行判断,返回对应数据库类型
......
return new DatabaseTypeAndLength(...);
}
}
java
// 自定义java类型与数据库类型映射关系
AutoTableGlobalConfig.setJavaTypeToDatabaseTypeConverter(new JavaTypeToDatabaseTypeConverter() {
/**
* 完全自定义类型转换逻辑,包括解析注解的逻辑
*/
@Override
public DatabaseTypeAndLength convert(String databaseDialect, Class<?> clazz, Field field) {
// 根据 数据源类型、类、字段 进行判断,返回对应数据库类型
......
return new DatabaseTypeAndLength(...);
}
});
// 开始
AutoTableBootstrap.start();