Spring 程式設計式事務管理

wjaning發表於2021-09-09

Spring 程式設計式事務管理

程式設計式事務管理方法允許你在對你的原始碼程式設計的幫助下管理事務。這給了你極大地靈活性,但是它很難維護。

在我們開始之前,至少要有兩個資料庫表,在事務的幫助下我們可以執行多種 CRUD 操作。以 Student 表為例,用下述 DDL 可以在 MySQL TEST 資料庫中建立該表:

CREATE TABLE Student(    ID   INT NOT NULL AUTO_INCREMENT,    NAME VARCHAR(20) NOT NULL,    AGE  INT NOT NULL,    PRIMARY KEY (ID) );

第二個表是 Marks,用來儲存基於年份的學生的標記。這裡 SID 是 Student 表的外來鍵。

CREATE TABLE Marks(    SID INT NOT NULL,    MARKS  INT NOT NULL,    YEAR   INT NOT NULL );

讓我們直接使用 PlatformTransactionManager 來實現程式設計式方法從而實現事務。要開始一個新事務,你需要有一個帶有適當的 transaction 屬性的 TransactionDefinition 的例項。這個例子中,我們使用預設的 transaction 屬性簡單的建立了 DefaultTransactionDefinition 的一個例項。

當 TransactionDefinition 建立後,你可以透過呼叫 getTransaction() 方法來開始你的事務,該方法會返回 TransactionStatus 的一個例項。 TransactionStatus 物件幫助追蹤當前的事務狀態,並且最終,如果一切執行順利,你可以使用 PlatformTransactionManager 的 commit() 方法來提交這個事務,否則的話,你可以使用 rollback() 方法來回滾整個操作。

現在讓我們編寫我們的 Spring JDBC 應用程式,它能夠在 Student 和 Mark 表中實現簡單的操作。讓我們適當的使用 Eclipse IDE,並按照如下所示的步驟來建立一個 Spring 應用程式:

步驟 描述
1 建立一個名為 SpringExample 的專案,並在建立的專案中的 src 資料夾下建立包 com.tutorialspoint 。
2 使用 Add External JARs 選項新增必需的 Spring 庫,解釋見 Spring Hello World Example chapter.
3 在專案中新增 Spring JDBC 指定的最新的庫 mysql-connector-java.jarorg.springframework.jdbc.jar 和 org.springframework.transaction.jar。如果你還沒有這些庫,你可以下載它們。
4 建立 DAO 介面 StudentDAO 並列出所有需要的方法。儘管它不是必需的並且你可以直接編寫 StudentJDBCTemplate 類,但是作為一個好的實踐,我們還是做吧。
5 在 com.tutorialspoint 包下建立其他必需的 Java 類 StudentMarksStudentMarksMapperStudentJDBCTemplate 和 MainApp。如果需要的話,你可以建立其他的 POJO 類。
6 確保你已經在 TEST 資料庫中建立了 Student 和 Marks 表。還要確保你的 MySQL 伺服器執行正常並且你使用給出的使用者名稱和密碼可以讀/寫訪問資料庫。
7 在 src 資料夾下建立 Beans 配置檔案 Beans.xml 。
8 最後一步是建立所有 Java 檔案和 Bean 配置檔案的內容並按照如下所示的方法執行應用程式。

下面是資料訪問物件介面檔案 StudentDAO.java 的內容:

package com.tutorialspoint; import java.util.List; import javax.sql.DataSource; public interface StudentDAO {    /**      * This is the method to be used to initialize     * database resources ie. connection.     */    public void setDataSource(DataSource ds);    /**      * This is the method to be used to create     * a record in the Student and Marks tables.     */    public void create(String name, Integer age, Integer marks, Integer year);    /**      * This is the method to be used to list down     * all the records from the Student and Marks tables.     */    public List listStudents(); }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2983/viewspace-2797818/,如需轉載,請註明出處,否則將追究法律責任。

相關文章