事务的封装
将事务的开启、提交、回滚都写到工具类中,通过业务层调用。
工具类
public class JDBCUtils {
private static final Properties pro=new Properties();
private static final ThreadLocal<Connection> THREAD_LOCAL=new ThreadLocal<>();
static {
try {
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));
Class.forName(pro.getProperty("driver"));
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
//在线程中获取数据库链接对象
Connection con=THREAD_LOCAL.get();
try {
if (con==null){
con= DriverManager.getConnection(pro.getProperty("url"),pro.getProperty("username"),pro.getProperty("password"));
//把创建出来的链接保存到线程中 通过Thredlocal对象
THREAD_LOCAL.set(con);
}
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
public static void closeAll(ResultSet resultSet, Statement statement,Connection connection){
try {
if (resultSet!=null){
resultSet.close();
}
if (statement!=null){
statement.close();
}
if (connection!=null){
connection.close();
//当链接关闭,删除保存在线程中的链接对象
THREAD_LOCAL.remove();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//开启事务
public static Connection begin(){
Connection con=null;
try {
con=getConnection();
con.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
//事务提交
public static void commit(){
Connection con =null;
try {
con=getConnection();
con.commit();
} catch (SQLException e) {
e.printStackTrace();
}finally {
closeAll(null,null,con);
}
}
//事务回滚
public static void rollback(){
Connection con =null;
try {
con=getConnection();
con.rollback();
} catch (SQLException e) {
e.printStackTrace();
}finally {
closeAll(null,null,con);
}
}
}