sql >> データベース >  >> RDS >> Mysql

DAOによるトランザクション管理

    プレーンJDBCを使用している場合、できることはConnectionの同じインスタンスを共有することです。 DAOクラスの2つのインスタンスで。

    public class EmployeeDAO {
    
        private Connection conn;
    
        public void setConnection(Connection conn) {
            this.conn = conn;
        }
    
        ...
    }
    
    public class BankDAO {
    
        private Connection conn;
    
        public void setConnection(Connection conn) {
            this.conn = conn;
        }
    
        ...
    }
    

    クライアントコードでは、最初にConnectionを作成する必要があります オブジェクトインスタンス。次に、conn.setAutoCommit(false);を使用してトランザクションを開始する必要があります。 。 Connectionを渡します 両方のDAOクラスへのオブジェクトインスタンス。どの操作でもエラーが発生しない場合は、conn.commit(); それ以外の場合は、conn.rollback();

    例:

    Connection conn = null;
    try {
        // getConnection from pool
    
        conn.setAutoCommit(false);
    
        EmployeeDAO employeeDAO = new EmployeeDAO();
        employeeDAO.setConnection(conn);
    
        BankDAO bankDAO = new BankDAO();
        bankDAO.setConnection(conn);
    
        // save employee
    
        // save bank details
    
        conn.commit();
    
    catch(Exception e) {
        if (conn != null) {
            conn.rollback();
        }
    } finally {
        if (conn != null) {
            conn.close();
        }
    }
    


    1. 結合された継承の外部キー名をJPA/Hibernateでオーバーライドします

    2. MySQLデータベースをロックして、一度に1人だけがクエリを実行できるようにしますか?

    3. Laraveleloquentはデータベース列で最も一般的な値を取得します

    4. ビューで使用されているエイリアスの実際の列名を見つけますか?