JDBC事務--軟件開發三層架構--ThreadLocal
一.JDBC事務
1.概述:
事務是指邏輯上的一組操作!這一組操作,通常認為是一個整體,不可拆分!
特點:同生共死;事務內的這一組操作要么全部成功,要么全部失敗!
作用:保證邏輯操作的完整性,安全性!
2.使用(3種方式)
???? 1)面向數據庫,使用SQL語句控制
???????? 開啟;(告訴數據庫,我們要開始做事情了,)
???????? START TRANSACTION;
???????? 提交;(確認上面所有的操作要生效);
???????? COMMIT;
???????? 回滾;(撤銷上面所做的所有操作);
???????? ROLLBACK;
???? 2)面向JDBC-Connection 接口(java.sql)
???? 常用方法:
???????? void setAutoCommit(boolean autoCommit) throws SQLException{}:參數默認為true,若要開啟,需設置為false;
???????? void commit()throws SQLException{}:提交事務;
???????? void rollback()throws SQLException{}:回滾事務;
???? 3)面向工具DBUtils--QueryRunner 類(org.apache.commons.dbutils);使用Connection對象控制
???? 構造方法:(必須使用空參構造)
???????? public QueryRunner()
???? 常用方法:
???????? public <T> T query(Connection conn,String sql,ResultSetHandler<T> rsh,Object... params)
???????????? throws SQLException{}:參數中必須傳遞開啟事務后的Connection對象;執行sql后自己提交或回滾事務;The???? object returned by the handler.
???????? public int update(Connection conn,String sql,Object... params)throws
???????????? SQLException{}:參數中必須傳遞開啟事務后的Connection對象;執行sql后自己提交或回滾事務;Returns:The???? number of rows updated.
3.注意事項:
???? 1):事務的開啟只有一個入口;
???? 2):提交或回滾都是結束事務;
???? 3):如果沒有手動開啟事務,默認每一條sql語句就是一個獨立的事務,當sql執行結束的時候,自動提交了;
???? 4):如果程序執行過程中出現異常情況,默認是回滾;
二.軟件開發三層架構
1.概述
所謂的3層架構是一個固定模式,使用這個模式可以快速開發軟件;
好處:
???? 1):高內聚;(相似的代碼或相似的功能可以集中在一起)
???? 2):低耦合;(代碼可以同時開發,只是結果聯系在一起)
???? 3):可維護;
???? 4):可重用;
???? 5):可擴展;
2.具體結構:
???? 1):表現層web;(主要用于數據的收集與展示)
???? 2):業務層service;(業務邏輯控制,通常事務會在這里開啟并結束)
???? 3):持久層DAO(Data Access Object);(數據層)(對數據進行CRUD,操作數據庫的代碼寫在這里);
???? 4).類:domain;存放javabean
???? 5).工具包:utils;存放工具
三.ThreadLocal<T> 類(java.lang)
???? 概述:
???????? ThreadLocal是一個容器,該容器中定義了一個特殊的變量,該變量保存的是將來線程傳遞過來的值;每個線程存值的時候,會存在特殊的變量的副本中;將來這些線程從變量中獲取的值互不影響,不會出現線程安全的問題;
????
???? 適用場景:
???????? 當一個線程中調用多個方法,不想進行參數傳遞的時候,可以使用ThreadLocal作為載體,讓該線程中的所有方法獲取一個值;
????
???? 定義:public class ThreadLocal<T> extends Object
???? 構造方法:(空參構造)
???????? public ThreadLocal()
???? 常用方法:
???????? public void set(T value){}:the value to be stored in the current thread's copy of this thread-local
???????? public T get(){}:Returns:the current thread's value of this thread-local