SpringMVC總結筆記01
阿新 • • 發佈:2018-12-17
Spring表示式
原理
重要的類:
-
SpelExpressionparser:SpringEL解析表達器–》父類Expressionparse
-
StandardEvaluationContext:直譯:標準化評估語境—》父類EvaluationContext
方法:
- parseExpression():解析器物件呼叫解析
- getValue():解析表達物件呼叫,獲取值
- getValue(解析域物件):解析表達物件呼叫,返回解析域物件的值
對於引用型別:不用解析域物件,直接解析
xml配置解析器
Spring事務
管理jdbc-連線資料庫事務
連線資料庫
匯入jar包
- Spring-jdbc:連線資料庫
- mysql-connector-java:連線
- commons-dbcp:連線池
- spring-tx:事務
- c3p0:連線池
c3P0連線池
queryForObject
new RowMapper<Users>() {
public Users mapRow(ResultSet resultSet, int i) throws SQLException {
return chuliresult(resultSet);
}
重要的類:
ComboPooledDataSource:負責連線資料庫
JdbcTemplate:負責sql操作,相當於封裝的sql工具類,負責Dao與持久層的傢伙
DataSourceTransactionManager:事務管理類
需要學習的類
- DispatcherServlet:作為前端控制器,整個流程控制的中心,控制其它元件執行,統一排程,降低元件之間的耦合性,提高每個元件的擴充套件性。
- HandlerMapping:通過擴充套件處理器對映器實現不同的對映方式,例如:配置檔案方式,實現介面方式,註解方式等。
- HandlAdapter:通過擴充套件處理器介面卡,支援更多型別的處理器,呼叫處理器傳遞引數等工作!
- ViewResolver:通過擴充套件檢視解析器,支援更多型別的檢視解析,例如:jsp、freemarker、pdf、excel等。
事務管理
事務的傳播行為*
- (1)PROPAGATION_REQUIRED 表示當前方法必須執行在事務中。如果當前事務存在,方法將會在該事務中執行。否則,會啟動一個新的事務
- (2)PROPAGATION_SUPPORTS 表示當前方法不需要事務上下文,但是如果存在當前事務的話,那麼該方法會在這個事務中執行
- (3)PROPAGATION_MANDATORY 表示該方法必須在事務中執行,如果當前事務不存在,則會丟擲一個異常
- (4)PROPAGATION_REQUIRED_NEW 表示當前方法必須執行在它自己的事務中。一個新的事務將被啟動。 如果存在當前事務,在該方法執行期間,當前事務會被掛起。 如果使用JTATransactionManager的話,則需要訪問TransactionManager
- (5)PROPAGATION_NOT_SUPPORTED 表示該方法不應該執行在事務中。如果存在當前事務,在該方法執行期間,當前事務將被掛起。 如果使用JTATransactionManager的話,則需要訪問TransactionManager
- (6)PROPAGATION_NEVER 表示當前方法不應該執行在事務上下文中。如果當前正有一個事務在執行,則會丟擲異常
- (7)PROPAGATION_NESTED 表示如果當前已經存在一個事務,那麼該方法將會在巢狀事務中執行。 巢狀的事務可以獨立於當前事務進行單獨地提交或回滾。 如果當前事務不存在,那麼其行為與PROPAGATION_REQUIRED一樣。 注意各廠商對這種傳播行為的支援是有所差異的。可以參考資源管理器的文件來確認它們是否支援巢狀事務
事務的特性ACID
- 原子性(atomicity)
- 一致性(consistency)
- 隔離性(isolation)
- 永續性(durability)
事務併發引起的問題
-
髒讀
一個事務讀取到另外一個可能回滾的事務資料 ,是一個髒的資料。對應事務隔離性
-
不可重複讀
在同一個事務中兩次讀取到的資料不一致,由於兩次查詢過程的時間中,發生了更新或者增刪改的操作,違背一致性
-
幻讀
插入事務執行中,查詢事務查詢過來,發現數據沒有變化,實際上,插入操作正在進行
事務隔離級別
- 讀未提交
- 讀已提交
- 可重複讀
- 序列化