1.pom配置文件
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
2.配置类,
jdbc
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.user}")
private String user;
@Value("${jdbc.psd}")
private String psd;
@Autowired
private ServiceFactory serviceFactory;
@Bean("proxyService")
AccountService createProxy(){
return serviceFactory.getAccountService();
}
@Bean
QueryRunner createQueryRunner(){
return new QueryRunner();
}
@Bean
DataSource createDataSource(){
ComboPooledDataSource ds =new ComboPooledDataSource();
try {
ds.setDriverClass(driver);
ds.setJdbcUrl(url);
ds.setUser(user);
ds.setPassword(psd);
} catch (PropertyVetoException e) {
// System.out.println("哈哈哈");
e.printStackTrace();
}
return ds;
}
}
springconfig
@Configuration
@ComponentScan("top.chenyp")
@Import(JdbcConfig.class)
@PropertySource("classpath:jdbc1.properties")
public class SpringConfig {}
dao和service忽略
3.配置连接和事务
连接
@Component
public class ConnectionUtils {
private ThreadLocal<Connection> tl =new ThreadLocal<>();
@Autowired
private DataSource ds;
/**
* 获取当前线程的连接
*/
public Connection getThreadConnection(){
//从threadLocal获取
Connection conn = tl.get();
try {
//判断线程有连接
if (conn==null){
conn =ds.getConnection();
tl.set(conn);
}
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public void removeConnection(){
tl.remove();
}
}
事务
@Component
public class TransactionManager {
@Autowired
private ConnectionUtils connectionUtils;
/**
* 开启事务
*/
public void beginTransaction(){
try {
connectionUtils.getThreadConnection().setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 提交
*/
public void commit(){
try {
connectionUtils.getThreadConnection().commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 回滚事务
*/
public void rollback(){
try {
connectionUtils.getThreadConnection().rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 释放事务
*/
public void close(){
try {
connectionUtils.getThreadConnection().close();
connectionUtils.removeConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
4.测试操作
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class Test {
@Autowired
@Qualifier("proxyService")
private AccountService proxyService;
@org.junit.Test
public void test(){
List<Account> allAccount = proxyService.findAllAccount();
for (Account account : allAccount) {
System.out.println(account);
}
}
}