如何使用JDBCTemplate处理自定义数据类型?
例如,当使用postgres jdbc库时,有一种方法addDataType可用于添加用户定义的类型。
但是我想知道如何在使用JDBCTemplate
时实现该功能,因为我尝试避免使用低电平connection
。
这可能吗?
[醒来后,我突然发现我实际上需要的是connection
对象的钩子,也许我可以通过扩展DataSource
并覆盖getConnection()
方法来做到这一点。
之前:
mDataSource = new HikariDataSource(config);
mJdbcTemplate = new JdbcTemplate(mDataSource);
之后:
mDataSource = new CustomDataTypeDataSource(config);
mJdbcTemplate = new JdbcTemplate(mDataSource);
class CustomDataTypeDataSource extends HikariDataSource {
public CustomDataTypeDataSource() {
super();
}
public CustomDataTypeDataSource(HikariConfig configuration) {
super(configuration);
}
@Override
public Connection getConnection() throws SQLException {
Connection conn = super.getConnection();
prepareConnection(conn);
return conn;
}
}
然后,我们可以在prepareConnection()
(在我的情况下为PostgreSQL)中做所有魔术(添加自定义数据类型):
@Override
protected void prepareConnection(Connection connection) throws SQLException {
if (connection != null) {
PgConnection pgconn = ((PgConnection) connection.unwrap(PGConnection.class));
pgconn.addDataType("xx", xx.class);
}
}