Connection的相关操作,防止业务层(service层含有java.sql.*),连接池类似!!!
原理:使用ThreadLocal,得到当前线程上的变量!!!!
package cn.viwiv.util;
import java.sql.Connection;
import java.sql.SQLException;
public class TransactionManager {
private static final ThreadLocal<Connection> threadLocal = new ThreadLocal<>();
public static Connection getConnection() {
Connection connection = threadLocal.get();
if(connection == null) {
connection = DBUtils.getConnection();
threadLocal.set(connection);
}
return connection;
}
public static void startTransaction() {
Connection connection = getConnection();
try {
connection.setAutoCommit(false);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public static void commit() {
Connection connection = getConnection();
try {
connection.commit();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public static void rollback() {
Connection connection = getConnection();
try {
connection.rollback();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public static void release() {
Connection connection = getConnection();
try {
connection.close();
threadLocal.remove();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}