Java事务管理工具类

package com.thit.timdm.helper;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * 事务管理 工具类
 * 确保遵循原子性、一致性、隔离性和持续性,使数据能够正确地提交到数据库中
 * 
 * @author ZhuPengWei
 * @date 2017年10月14日
 */
public class TrancationManager {
    /**
     * 创建线程局部变量 存放数据库连接对象
     */
    private static ThreadLocal threadLocal = new ThreadLocal();
    /**
     * 数据库连接对象
     */
    private static Connection connection = null;

    /**
     * 无参构造 防止外部直接创建对象
     */
    @SuppressWarnings("unused")
    private TrancationManager() {
    }

    /**
     * 带参构造
     * 
     * @param connection 数据库连接对象
     */
    public TrancationManager(Connection connection) {
        TrancationManager.connection = connection;
    }

    /**
     * 获取数据库连接
     * @return 数据库连接
     */
    public Connection getConnection() {
        Connection conn = threadLocal.get();
        if (conn == null) {
            threadLocal.set(connection);
        }
        return threadLocal.get();
    }

    /**
     * 开启事务
     */
    public void start() {
        Connection conn = this.getConnection();
        try {
            conn.setAutoCommit(false);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 提交事务
     */
    public void commit() {
        Connection conn = this.getConnection();
        try {
            conn.commit();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 回滚事务
     */
    public void rollback() {
        Connection conn = this.getConnection();
        try {
            conn.rollback();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 释放资源,关闭连接
     */
    public void close() {
        Connection conn = this.getConnection();
        try {
            // 关闭数据库连接
            conn.close();
            // 局部线程解绑
            threadLocal.remove();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(事务,java)