Работа с базами данных в Java: PostgreSQL и MongoDB

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение в работу с базами данных в Java

Современная Java-разработка редко обходится без взаимодействия с системами хранения данных. Выбор между реляционными (SQL) и нереляционными (NoSQL) базами данных — одна из ключевых архитектурных задач. В этой статье на примере PostgreSQL (классическая реляционная СУБД) и MongoDB (документоориентированная NoSQL) мы разберем основные подходы, лучшие практики и приведем готовые примеры кода. Материал будет полезен как начинающим, так и опытным разработчикам, желающим систематизировать знания.

1. Подключение и работа с PostgreSQL в Java

1.1 Настройка JDBC-драйвера

PostgreSQL — одна из самых популярных реляционных баз данных. Для работы с ней из Java используется драйвер JDBC. Добавьте зависимость в pom.xml (Maven):

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.6.0</version>
</dependency>

После добавления драйвера можно устанавливать соединение:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class PostgresConnection {
    public static void main(String[] args) {
        String url = "jdbc:postgresql://localhost:5432/mydb";
        String user = "admin";
        String password = "secret";

        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            System.out.println("Соединение с PostgreSQL установлено!");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

1.2 CRUD-операции (Create, Read, Update, Delete)

Рассмотрим пример работы с таблицей users. Создание записи:

String insertSQL = "INSERT INTO users (name, email) VALUES (?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(insertSQL)) {
    pstmt.setString(1, "Иван Петров");
    pstmt.setString(2, "ivan@example.com");
    pstmt.executeUpdate();
}

Чтение данных:

String selectSQL = "SELECT * FROM users WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(selectSQL)) {
    pstmt.setInt(1, 1);
    ResultSet rs = pstmt.executeQuery();
    while (rs.next()) {
        System.out.println(rs.getString("name") + " - " + rs.getString("email"));
    }
}

Обновление и удаление выполняются аналогично через UPDATE и DELETE с использованием PreparedStatement. Всегда используйте параметризованные запросы — это защищает от SQL-инъекций.

1.3 Использование пула соединений (HikariCP)

В продакшене не рекомендуется открывать новое соединение на каждый запрос. Используйте пул соединений. Добавьте зависимость:

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.0.1</version>
</dependency>

Конфигурация:

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:postgresql://localhost:5432/mydb");
config.setUsername("admin");
config.setPassword("secret");
config.setMaximumPoolSize(10);

HikariDataSource ds = new HikariDataSource(config);
Connection conn = ds.getConnection();

2. Подключение и работа с MongoDB в Java

2.1 Настройка MongoDB Java Driver

MongoDB хранит данные в формате JSON-подобных документов. Для работы используется официальный драйвер. Зависимость Maven:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.10.2</version>
</dependency>

Подключение к локальной базе данных:

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

public class MongoConnection {
    public static void main(String[] args) {
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        MongoDatabase database = mongoClient.getDatabase("mydb");
        MongoCollection<Document> collection = database.getCollection("users");
        System.out.println("Подключение к MongoDB установлено!");
    }
}

2.2 CRUD-операции с документами

Создание документа (аналог вставки строки):

Document user = new Document("name", "Мария Сидорова")
        .append("email", "maria@example.com")
        .append("age", 28);
collection.insertOne(user);

Чтение документов с фильтром:

Document query = new Document("name", "Мария Сидорова");
Document result = collection.find(query).first();
System.out.println(result.toJson());

Обновление:

Document filter = new Document("name", "Мария Сидорова");
Document update = new Document("$set", new Document("age", 29));
collection.updateOne(filter, update);

Удаление:

Document deleteFilter = new Document("name", "Мария Сидорова");
collection.deleteOne(deleteFilter);

2.3 Работа с индексами и агрегацией

Для ускорения запросов создавайте индексы:

collection.createIndex(new Document("email", 1)); // 1 - по возрастанию

Пример агрегации для подсчета пользователей по возрасту:

List<Document> pipeline = Arrays.asList(
    new Document("$group", new Document("_id", "$age")
            .append("count", new Document("$sum", 1)))
);
for (Document doc : collection.aggregate(pipeline)) {
    System.out.println(doc.toJson());
}

3. Сравнение PostgreSQL и MongoDB: когда что выбирать?

3.1 Ключевые различия

  • Схема данных: PostgreSQL требует жесткой схемы (таблицы, типы колонок). MongoDB — гибкая схема, документы могут различаться по структуре.
  • Транзакции: PostgreSQL поддерживает ACID-транзакции на уровне строк. MongoDB с версии 4.0 также поддерживает multi-document транзакции, но они менее производительны.
  • Связи: В PostgreSQL связи реализуются через JOIN. В MongoDB — через в

Блоги

Рекомендаций по книгам