В конце концов, ваш проприетарный API должен получить доступ к некоторой базе данных (доступной на каком-то сервере) с использованием некоторых учетных данных. Вы просто этого не видите. В Spring вы должны сначала определить некоторые DataSource
. Либо используйте существующие библиотеки, такие как dbcp, bonecp или класса c3p0 или взять вопрос, предоставленный вашим сервером приложений через класс jndi. Пока они реализуют интерфейс DataSource
, не имеет значения, какой подход вы выберете. Слишком много, чтобы объяснять каждую подробно.
После настройки компонента DataSource
я настоятельно рекомендую использовать JdbcTemplate
, что значительно упрощает код JDBC, например:
List<Map<String,Object>> res = jdbcTemplate.queryForList("select * from test");
...и многое другое.
ОБНОВЛЕНИЕ. Если вы хотите использовать существующий устаревший API с современными платформами, ожидающими DataSource
(почти все из них), реализация адаптера DataSource
тривиальна (остальные методы могут остаться нереализованными, выбрасывая UnsupportedOperationException
):
public class LegacyDataSourceAdapter implements DataSource {
@Override
public Connection getConnection() throws SQLException {
return JdbcServiceFactory.getInstance().getDefaultDatabase().getConnectionManager().getConnection();
}
@Override
public Connection getConnection(String username, String password) throws SQLException {
return getConnection();
}
//other methods are irrelevant
}
Теперь просто создайте экземпляр LegacyDataSourceAdapter
(возможно, как компонент Spring) и передайте его в JdbcTemplate
, Hibernate, myBatis...
Кстати, у вас есть первоклассный пример плохого дизайна API:
Connection conn = JdbcServiceFactory.
getInstance().
getDefaultDatabase().
getConnectionManager().
getConnection();
person
Tomasz Nurkiewicz
schedule
31.07.2012