ホームページ >Java >&#&チュートリアル >Aurora PostgreSQL のマスタリー: チームが泣いて喜ぶ防弾 Java モデルと DAO
聞いてください、コードジョッキー。 Aurora PostgreSQL ゲームをアマチュア時代から大リーグまで変えるための知識をいくつか紹介します。私たちが話しているのは、上級開発者が泣いて喜び、DBA がビールをおごってくれるかどうか (年齢によって異なります) をもたらす Java モデルとデータベース アクセサーについてです。
それでは、詳しく見ていきましょう:
public class User { private UUID id; private String email; private String hashedPassword; private Instant createdAt; private Instant updatedAt; // Constructors, getters, and setters omitted for brevity public boolean isPasswordValid(String password) { // Implement password hashing and validation logic } public void updatePassword(String newPassword) { this.hashedPassword = // Hash the new password this.updatedAt = Instant.now(); } // Other business logic methods }
これが機能する理由:
public interface UserDao { Optional<User> findById(UUID id); List<User> findByEmail(String email); void save(User user); void update(User user); void delete(UUID id); List<User> findRecentUsers(int limit); }
これが素晴らしい理由:
public class AuroraPostgresUserDao implements UserDao { private final DataSource dataSource; public AuroraPostgresUserDao(DataSource dataSource) { this.dataSource = dataSource; } @Override public Optional<User> findById(UUID id) { String sql = "SELECT * FROM users WHERE id = ?"; try (Connection conn = dataSource.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setObject(1, id); try (ResultSet rs = pstmt.executeQuery()) { if (rs.next()) { return Optional.of(mapResultSetToUser(rs)); } } } catch (SQLException e) { throw new DatabaseException("Error finding user by ID", e); } return Optional.empty(); } @Override public void save(User user) { String sql = "INSERT INTO users (id, email, hashed_password, created_at, updated_at) VALUES (?, ?, ?, ?, ?)"; try (Connection conn = dataSource.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setObject(1, user.getId()); pstmt.setString(2, user.getEmail()); pstmt.setString(3, user.getHashedPassword()); pstmt.setTimestamp(4, Timestamp.from(user.getCreatedAt())); pstmt.setTimestamp(5, Timestamp.from(user.getUpdatedAt())); pstmt.executeUpdate(); } catch (SQLException e) { throw new DatabaseException("Error saving user", e); } } // Other method implementations... private User mapResultSetToUser(ResultSet rs) throws SQLException { return new User( (UUID) rs.getObject("id"), rs.getString("email"), rs.getString("hashed_password"), rs.getTimestamp("created_at").toInstant(), rs.getTimestamp("updated_at").toInstant() ); } }
これが天才である理由:
Aurora は多くの接続を処理できますが、無駄にしないでください。接続プーリングには、HikariCP などを使用します。
多くのレコードを挿入または更新する必要がある場合は、バッチ操作を使用します。
public void saveUsers(List<User> users) { String sql = "INSERT INTO users (id, email, hashed_password, created_at, updated_at) VALUES (?, ?, ?, ?, ?)"; try (Connection conn = dataSource.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql)) { for (User user : users) { pstmt.setObject(1, user.getId()); pstmt.setString(2, user.getEmail()); pstmt.setString(3, user.getHashedPassword()); pstmt.setTimestamp(4, Timestamp.from(user.getCreatedAt())); pstmt.setTimestamp(5, Timestamp.from(user.getUpdatedAt())); pstmt.addBatch(); } pstmt.executeBatch(); } catch (SQLException e) { throw new DatabaseException("Error batch saving users", e); } }
負荷を分散するには、読み取り操作に別の DataSource を使用します。
アトミックである必要がある操作にはトランザクションを使用します。
public void transferMoney(UUID fromId, UUID toId, BigDecimal amount) { String debitSql = "UPDATE accounts SET balance = balance - ? WHERE id = ?"; String creditSql = "UPDATE accounts SET balance = balance + ? WHERE id = ?"; try (Connection conn = dataSource.getConnection()) { conn.setAutoCommit(false); try (PreparedStatement debitStmt = conn.prepareStatement(debitSql); PreparedStatement creditStmt = conn.prepareStatement(creditSql)) { debitStmt.setBigDecimal(1, amount); debitStmt.setObject(2, fromId); debitStmt.executeUpdate(); creditStmt.setBigDecimal(1, amount); creditStmt.setObject(2, toId); creditStmt.executeUpdate(); conn.commit(); } catch (SQLException e) { conn.rollback(); throw new DatabaseException("Error transferring money", e); } finally { conn.setAutoCommit(true); } } catch (SQLException e) { throw new DatabaseException("Error managing transaction", e); } }
テストには Aurora の高速クローン作成を、接続処理には優れたフェイルオーバー機能を活用してください。
Aurora PostgreSQL 用の堅牢な Java モデルと DAO を作成するということは、機能するコードを書くだけではありません。それは、堅牢で効率的で、どんなことにも対応できるデータ レイヤーを作成することです。
モデルと DAO はアプリケーションの基礎であることを思い出してください。それらを正しく理解すれば、成功への準備が整います。それらを誤解すると、流砂の上に建物を建てることになります。
さあ、読むのをやめてコーディングを始めてください。 Aurora PostgreSQL データベースは、飼い慣らされるのを待っています。
以上がAurora PostgreSQL のマスタリー: チームが泣いて喜ぶ防弾 Java モデルと DAOの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。