数据库中插入自定义类型

最后更新:2025-07-29 17:26:23 | 状态:未完成
如果有项目中自定义的类型 在写入数据库时 驱动有可能不支持
可以注册一个DataWriter,实现write方法,在写入数据库时如果匹配到相关的类型 会调用write方法执行类型转换
write要把Object value转换成java默认类型,这样系统内部会转换成驱动需要的类型
或者直接转换成数据库驱动支持的类型
DataWriterFactory.reg(new Object[]{java.util.Date.class, User.class, "其他class"},new DataWriter() {
	@Override
	public Object write(Object value, Boolean placeholder, Boolean unicode, TypeMetadata type) {
		Object result = value;
		if(result instanceof User){
			//遇到User类型 返回主键值
			result = ((User)result).getId();
		}
		//把value转换成 java默认类型 或 数据库驱动中提供的类型
		System.out.println(LogUtil.format("用户自定义类型转换器", 31));
		return result;
	}
});

也可以限定数据库类型 DataWriterFactory.reg(DatabaseType dbt, Object[] supports, DataWriter writer)

第一个参数中 new Object[]{java.util.Date.class, User.class, "其他class"} 可以接收任何类型的参数,包括String类型的"varchar"等

当写入数据库时遇到第一个参数中指定的任意一个类型匹配时 就会调用定义的DataWriter方法实现类型转换
PG数据库经常遇到写入JSON格式的数据,这种情况可以不定义DataWriter,
ConfigTable.IS_ENABLE_SQL_DATATYPE_CONVERT = true; 打开这个也可以,会在SQL执行过程中把String转换成JSON

首页 最近更新 搜索 提交 回复