service(业务层) -- biz
JDBC中的事务:
jdbc中的事务是自动提交的,默认一条sql命令就提交一次事务。
我们为了保证事务的原子操作的完整性,需要手动控制事务:
设置手动事务:conn.setAutoCommit(false);
手动提交事务: conn.commit();
手动回滚事务: conn.rollback();
JDBCUtil3:
加入了ThreadLocal:
线程绑定,将Connection同一个,即可解决,问题在于多个Connection导致无法操作同一个,在JDBCUitl类中将connection进行线程绑定,
共同操作同一个Connection,即可。
代码如下。:
private static ThreadLocal<Connection> tol = new ThreadLocal<Connection>();
//获取一个Connection
public static Connection getConnection() throws Exception{
//从当前线程取Connection 如果没有就创建一个
Connection conn = tol.get();
if(conn == null){
//2.获取Connection
conn = DriverManager.getConnection(prop.getProperty("url"),
prop.getProperty("username"),prop.getProperty("password"));
tol.set(conn);
}
return conn;
}
注意:由于现在service和dao使用的是一个Connection对象,所以 dao不能关闭Connection,必须在Service关闭