Dengar, joki kod. Saya akan menurunkan beberapa pengetahuan yang akan mengubah permainan Aurora PostgreSQL anda daripada jam amatur kepada liga besar. Kami bercakap tentang model Java dan pengakses pangkalan data yang akan membuatkan pembangun kanan anda menangis kegembiraan dan DBA anda membelikan anda bir atau tidak (bergantung pada umur anda).
Sekarang, mari kita pecahkan:
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 }
Mengapa Ini Berfungsi:
public interface UserDao { OptionalfindById(UUID id); List findByEmail(String email); void save(User user); void update(User user); void delete(UUID id); List findRecentUsers(int limit); }
Mengapa Ini Bergegar:
public class AuroraPostgresUserDao implements UserDao { private final DataSource dataSource; public AuroraPostgresUserDao(DataSource dataSource) { this.dataSource = dataSource; } @Override public OptionalfindById(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() ); } }
Kenapa Ini Genius:
Aurora boleh mengendalikan banyak sambungan, tetapi jangan membazir. Gunakan HikariCP atau serupa untuk pengumpulan sambungan.
Apabila anda perlu memasukkan atau mengemas kini banyak rekod, gunakan operasi kelompok.
public void saveUsers(Listusers) { 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); } }
Gunakan Sumber Data yang berasingan untuk operasi baca bagi menyebarkan beban.
Gunakan transaksi untuk operasi yang perlu bersifat atom.
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); } }
Manfaatkan pengklonan pantas Aurora untuk ujian, dan keupayaan failover unggulnya dalam pengendalian sambungan anda.
Mencipta model Java yang kukuh dan DAO untuk Aurora PostgreSQL bukan hanya tentang menulis kod yang berfungsi. Ini tentang mencipta lapisan data yang teguh, cekap dan bersedia untuk apa sahaja yang anda lakukan.
Ingat, model dan DAO anda ialah asas aplikasi anda. Betulkan mereka, dan anda sedang mempersiapkan diri untuk berjaya. Silap faham dan anda sedang membina pasir.
Sekarang berhenti membaca dan mulakan pengekodan. Pangkalan data Aurora PostgreSQL anda sedang menunggu untuk dijinakkan.
Atas ialah kandungan terperinci Penguasaan Aurora PostgreSQL: Model Java Kalis Peluru dan DAO Yang Akan Membuat Pasukan Anda Menangis Kegembiraan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!