事物處理、DAO

事務(wù)處理

JDBC中,事務(wù)是自動提交的。每執(zhí)行一次DML就提交一次事務(wù)。

事務(wù)特性:

  • 原子性(Atomicity):事務(wù)必須是原子工作單元;對于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行
  • 一致性(Consistency):事務(wù)在完成時,必須使所有的數(shù)據(jù)都保持一致狀態(tài)
  • 隔離性(Isolation ):由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離
  • 持久性(Durability):事務(wù),它對于系統(tǒng)的影響是永久性的

事務(wù)是數(shù)據(jù)庫的概念,JDBC支持事務(wù),本質(zhì)還是在數(shù)據(jù)庫中實現(xiàn)的

事務(wù)相關(guān)API

相關(guān)API:

  • Connection.getAutoCommit():獲得當(dāng)前事務(wù)的提交方式,默認為true
  • Connection.setAutoCommit():設(shè)置事務(wù)的提交屬性,參數(shù)是true :自動提交:false :不自動提交
  • Connection.commit():提交事務(wù)
  • Connection.rollback():回滾事務(wù)

批量處理

批量處理可以減少IO,提高效率

批量更新API

  • addBatch(String sql)
    Statement類的方法,可以將多條sql語句添加Statement 對象的SQL語句列表中
  • addBatch()
    PreparedStatement類的方法,可以將多條預(yù)編譯的sql語句添加到PreparedStatement對象的SQL語句列表中
  • executeBatch()
    把Statement對象或PreparedStatement對象語句列表中 的所有SQL語句發(fā)送給數(shù)據(jù)庫進碰理
  • clearBatch()
    清空當(dāng)前SQL語句列表

防止OutOfMemory

如果PreparedStatement對象中的SQL列表包含過多的待處理SQL語句,可能會產(chǎn)生OutOfMemory錯誤,及時處理SQL語句列表。

返回自動主鍵

利用PreparedStatement的getGeneratedKeys方法獲取自增類型的數(shù)據(jù),性能良好,只要一次SQL交互:

PreparedStatement preparedStatement = connection.prepareStatement(sql, new String[]{"deptno"});
preparedStatement.executeUpdate();
resultSet.next()
int id = resultSet.getInt(1);

分頁

分頁可以分為兩種策略,一種是直接用數(shù)據(jù)庫的分頁來進行,另一種可以基于緩存的分頁技術(shù),一次性全部取出數(shù)據(jù),然后程序內(nèi)進行分頁

DAO

DAO (Data Access Object)數(shù)據(jù)訪問對象

建立在數(shù)據(jù)庫和業(yè)務(wù)層之間,封裝所有對數(shù)據(jù)庫的訪問。將數(shù)據(jù)庫的一條數(shù)據(jù)映射為java中的一個對象

目的:數(shù)據(jù)訪問邏輯和業(yè)務(wù)邏輯分開,使得操作對象就可以完成對數(shù)據(jù)庫數(shù)據(jù)的修改。

DAO通常包括:

  1. 一個DAO工廠類
  2. 一個DAO接口
  3. 一個實現(xiàn)DAO接口的具體類
  4. 數(shù)據(jù)傳遞對象(實現(xiàn)對象或值對象)

實體對象

DAO層需要定義對數(shù)據(jù)庫中表的訪問

實體類就是java中的一個類,用于描述數(shù)據(jù)庫中的一張表,每一個實例代表數(shù)據(jù)庫中的一個數(shù)據(jù)。實體類的用途就是描述對象和數(shù)據(jù)表之間的映射。

  • 表和類對應(yīng)
  • 表中的字段和類的屬性對應(yīng)
  • 記錄和對象對應(yīng)

異常處理機制

多層系統(tǒng)的異常處理原則:

  1. 誰拋出的異常,誰捕捉處理,因為只有異常拋出者,知道怎樣捕捉處理異常;
  2. 盡量在當(dāng)前層中捕捉處理拋出的異常,盡置不要拋出到上層接口;
  3. 盡量在每層中封裝每層的異常類,這樣可準確定位異常拋出的層;
  4. 如異常無法捕捉處理,則向上層接口拋出,直至拋給JVM;
  5. 應(yīng)盡量避免將異常拋給JVM
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容