0

我正在使用专有 api 构建应用程序。要连接到数据库,我使用返回 Connection 对象的方法,然后在该连接上调用适当的方法来在数据库上运行查询,例如......

Connection conn = JdbcServiceFactory.getInstance().getDefaultDatabase().getConnectionManager().getConnection();

PreparedStatement ps = conn.prepareStatement("select * from test");

如果我选择在下一个项目中使用 Spring MVC 3,我必须做些什么来设置数据库连接?从我在文档中看到的内容来看,我在容器中使用了数据源标记并传递了 URL、用户名和密码。如图所示,我目前不必这样做来获得连接。

4

1 回答 1

1

归根结底,您的专有 API 必须使用某些凭据访问某些数据库(在某些服务器上可用)。你只是没有看到这一点。在 Spring 中,您必须首先定义一些DataSource. 要么使用现有的库,如 ,要么使用您的应用程序服务器通过提供的库。只要他们实现DataSource接口,您选择哪种方法都没有关系。太多了,无法详细解释每一个。

一旦你DataSource设置了 bean,我强烈推荐使用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 bean)并将其传递给JdbcTemplateHibernate、myBatis...


顺便说一句,您在这里有一些糟糕的 API 设计的一流示例:

Connection conn = JdbcServiceFactory.
  getInstance().
  getDefaultDatabase().
  getConnectionManager().
  getConnection();
于 2012-07-31T16:15:10.930 回答