在javaee的三層結構中,為什麼事物存在於業務層

來源:互聯網
上載者:User

標籤:jdbc中的事物書寫

我們都知道在javaee實際開發中,分為3層結構來開發,controller,service和dao

那麼為什麼事物要存在於業務層中,事物是通過connection對象操作的,使用原始jdbc連結資料庫的連結也是connection操作的,connection是在到是怎麼傳遞到dao的呢?

這裡講解兩種方式
第一種通過形式參數的方式

第二種通過ThreadLocal的方式
ThreadLocal的底層是個map,該map的key是固定的,當前線程。value可以讓我們存入任意對象

public class JdbcUtils {    // 成員變數,建立了C3P0的串連池(串連池中已經存在串連了...)    private static final ComboPooledDataSource DATASOURCE = new ComboPooledDataSource();    // 把Connection綁定到當前的線程中    private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();    /**     * 返回的是C3P0的串連池     * @return     */    public static DataSource getDataSource(){        return DATASOURCE;    }    /**     * 擷取串連,返回串連     * @return     * @throws SQLException      */    public static Connection getConnection() throws SQLException{        Connection conn = null;        // 從tl中擷取        conn = tl.get();        if(conn == null){            // 從串連池中擷取串連            conn = DATASOURCE.getConnection();            // 非常關鍵,把串連存入到tl中            tl.set(conn);        }        return conn;    }    /**     * 開啟事務     * @throws SQLException      */    public static void beginTransaction() throws SQLException{        // 調用getConnection()        Connection conn = getConnection();        conn.setAutoCommit(false);    }    /**     * 提交事務     * @throws SQLException      */    public static void commitTransaction() throws SQLException{        // 調用getConnection()        Connection conn = getConnection();        conn.commit();    }    /**     * 復原事務     * @throws SQLException      */    public static void rollBackTransaction() throws SQLException{        // 調用getConnection()        Connection conn = getConnection();        conn.rollback();    }    /**     * 歸還串連     * @throws SQLException      */    public static void closeConn() throws SQLException{        // 調用getConnection()        Connection conn = getConnection();        conn.close();        tl.remove();    }    /**     * 釋放資源     * @param stmt     * @param conn     */    public static void release(Statement stmt,Connection conn){        if(stmt != null){            try {                stmt.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(conn != null){            try {                // 已經變成了歸還了...                conn.close();            } catch (SQLException e) {                e.printStackTrace();            }        }    }    /**     * 釋放資源     * @param stmt     * @param conn     */    public static void release(ResultSet rs,Statement stmt,Connection conn){        if(rs != null){            try {                rs.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(stmt != null){            try {                stmt.close();            } catch (SQLException e) {                e.printStackTrace();            }        }        if(conn != null){            try {                // 把close()給修改了,原來是銷毀串連,現在讓方法變成歸還串連。                conn.close();            } catch (SQLException e) {                e.printStackTrace();            }        }    }}

在javaee的三層結構中,為什麼事物存在於業務層

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.