Guice, JDBC 和管理数据库连接
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";
}
}