JDBC操作数据库Connection
JDBC操作数据库的过程中,为了保证所有的操作在一个事务中:
1.使用的连接必须是同一个:service层开启事务的connection需要跟dao层访问数据库的connection保持一致。
2.线程并发情况下,每个线程只能操作各自的connection。每个线程的connection对象必须前后一致,线程隔离。
service层,Connection对象一般用于 开启提交回滚事务操作;dao层,Connection对象用于执行sql语句。
常规的解决方案:
1.传参:将service层的connetion对象直接传递到dao层。
2.加锁Synchronized锁。
ThreadLocal的解决方案:
public class JdbcUtils {static ThreadLocal<Connection> tl = new ThreadLocal<>();public static Conneciton getConnection() throw SQLException {Connection conn = tl.get();if(conn == null) {conn = ds.getConnection();tl.set(conn);}return conn;}
}
1.直接获取当前线程绑定的连接对象。
2.如果连接对象是空的,再去连接池中获取连接对象,将此连接对象跟当前线程进行绑定。
使用完Connection对象,