Guice, JDBC 和管理数据库连接

10 浏览
0 Comments

Guice, JDBC 和管理数据库连接

我在学习Guice时想要创建一个示例项目,该项目使用JDBC来读写SQL数据库。然而,多年来我一直使用Spring,让它抽象出连接处理和事务处理,所以在概念上我有点困惑。

我想要有一个服务来启动和停止事务,并调用多个重用同一连接并参与同一事务的仓库。我的问题是:

  • 我应该在哪里创建我的数据源?
  • 如何让仓库可以访问连接?(ThreadLocal?)
  • 管理事务的最佳方法(为注解创建拦截器?)

下面的代码展示了我如何在Spring中实现这一点。每个仓库中注入的JdbcOperations将可以访问与活动事务相关联的连接。

我找不到很多涵盖这方面内容的教程,除了一些演示如何为事务创建拦截器的教程。

我对继续使用Spring感到满意,因为它在我的项目中运行得非常好,但我想知道如何在纯Guice和JDBC(不使用JPA/Hibernate/Warp/重用Spring)中实现这一点。

@Service

public class MyService implements MyInterface {

@Autowired

private RepositoryA repositoryA;

@Autowired

private RepositoryB repositoryB;

@Autowired

private RepositoryC repositoryC;

@Override

@Transactional

public void doSomeWork() {

this.repositoryA.someInsert();

this.repositoryB.someUpdate();

this.repositoryC.someSelect();

}

}

@Repository

public class MyRepositoryA implements RepositoryA {

@Autowired

private JdbcOperations jdbcOperations;

@Override

public void someInsert() {

//使用jdbcOperations执行插入操作

}

}

@Repository

public class MyRepositoryB implements RepositoryB {

@Autowired

private JdbcOperations jdbcOperations;

@Override

public void someUpdate() {

//使用jdbcOperations执行更新操作

}

}

@Repository

public class MyRepositoryC implements RepositoryC {

@Autowired

private JdbcOperations jdbcOperations;

@Override

public String someSelect() {

//使用jdbcOperations执行查询操作,并使用RowMapper生成结果

return "select result";

}

}

0