基于Javaweb实现ATM机系统开发实战(十一)存储交易记录
发布人:shili8
发布时间:2025-01-01 09:22
阅读次数:0
**基于JavaWeb实现ATM机系统开发实战(十一)- 存储交易记录**
在前面的章节中,我们已经完成了对用户的基本信息管理、账户管理以及交易操作的实现。然而,一个完整的ATM机系统还需要能够存储和管理每笔交易的记录,以便于后续的统计分析和安全审计。因此,在本章节中,我们将重点介绍如何在JavaWeb项目中实现对交易记录的存储。
**1. 设计数据库表**
首先,我们需要设计一个数据库表来存储每笔交易的记录。假设我们已经有一个名为`atm_user`的表用于存储用户信息,另一个名为`atm_account`的表用于存储账户信息。现在,我们需要创建一个新的表`atm_transaction`来存储交易记录。
sqlCREATE TABLE atm_transaction ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, account_id INT NOT NULL, transaction_date DATE NOT NULL, transaction_type VARCHAR(10) NOT NULL, amount DECIMAL(10,2) NOT NULL, balance DECIMAL(10,2) NOT NULL);
**2. 实现交易记录的存储**
在JavaWeb项目中,我们需要创建一个新的DAO(Data Access Object)类来负责对数据库表`atm_transaction`进行CRUD操作。我们将其命名为`TransactionDAO.java`。
javapublic class TransactionDAO { private static final String TABLE_NAME = "atm_transaction"; public void saveTransaction(Transaction transaction) { // 使用JDBC或MyBatis等框架来执行SQL语句 String sql = "INSERT INTO " + TABLE_NAME + " (user_id, account_id, transaction_date, transaction_type, amount, balance) VALUES (?, ?, ?, ?, ?, ?)"; try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/atm", "root", "password"); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, transaction.getUserId()); pstmt.setInt(2, transaction.getAccountId()); pstmt.setDate(3, new Date(transaction.getTransactionDate())); pstmt.setString(4, transaction.getTransactionType()); pstmt.setDouble(5, transaction.getAmount()); pstmt.setDouble(6, transaction.getBalance()); pstmt.executeUpdate(); } catch (SQLException e) { // 处理异常 } } public ListgetTransactions(int userId) { // 使用JDBC或MyBatis等框架来执行SQL语句 String sql = "SELECT * FROM " + TABLE_NAME + " WHERE user_id = ?"; try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/atm", "root", "password"); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, userId); ResultSet rs = pstmt.executeQuery(); List transactions = new ArrayList<>(); while (rs.next()) { Transaction transaction = new Transaction(); transaction.setId(rs.getInt("id")); transaction.setUserId(rs.getInt("user_id")); transaction.setAccountId(rs.getInt("account_id")); transaction.setTransactionDate(rs.getDate("transaction_date")); transaction.setTransactionType(rs.getString("transaction_type")); transaction.setAmount(rs.getDouble("amount")); transaction.setBalance(rs.getDouble("balance")); transactions.add(transaction); } return transactions; } catch (SQLException e) { // 处理异常 } } }
**3. 在业务逻辑中使用TransactionDAO**
在我们的ATM机系统中,我们需要在交易操作的业务逻辑中使用`TransactionDAO`来存储每笔交易的记录。我们可以在`TransactionService.java`类中添加一个方法来完成这一步骤。
javapublic class TransactionService { private TransactionDAO transactionDAO; public void saveTransaction(Transaction transaction) { // 使用TransactionDAO来保存交易记录 transactionDAO.saveTransaction(transaction); } }
**4. 测试**
最后,我们需要测试一下我们的ATM机系统是否能够正确地存储每笔交易的记录。我们可以使用JUnit等框架来编写测试用例。
javapublic class TransactionServiceTest { @Test public void testSaveTransaction() { // 创建一个新的Transaction对象 Transaction transaction = new Transaction(); transaction.setUserId(1); transaction.setAccountId(1); transaction.setTransactionDate(new Date()); transaction.setTransactionType("deposit"); transaction.setAmount(100.0); transaction.setBalance(100.0); // 使用TransactionService来保存交易记录 TransactionService transactionService = new TransactionService(); transactionService.saveTransaction(transaction); // 验证是否能够正确地存储交易记录 Listtransactions = transactionService.getTransactionDAO().getTransactions(1); assertEquals(1, transactions.size()); } }
通过以上的步骤,我们已经完成了对交易记录的存储。我们可以在我们的ATM机系统中使用`TransactionDAO`来保存每笔交易的记录,并且能够正确地验证是否能够正确地存储交易记录。