【Java・Hibernate・PostgreSQL】MavenでPostgreSQLドライバーを依存関係に追加する方法を徹底解説!
Maven で PostgreSQL ドライバーを依存関係として追加する方法
Maven を使用して Java で PostgreSQL データベースに接続するには、プロジェクトに PostgreSQL JDBC ドライバーを依存関係として追加する必要があります。 このチュートリアルでは、Maven プロジェクトに PostgreSQL JDBC ドライバーを追加する方法を段階的に説明します。
手順
-
pom.xml ファイルを編集する
-
変更を保存してプロジェクトをビルドする
- 他のバージョンの PostgreSQL JDBC ドライバーを使用している場合は、上記の依存関係の
version
要素を適切なバージョンに置き換える必要があります。 - Maven プロジェクトで複数のモジュールを使用している場合は、PostgreSQL JDBC ドライバーの依存関係を各モジュールの
pom.xml
ファイルに追加する必要があります。
例
以下の例は、Hibernate を使用して PostgreSQL データベースに接続する Maven プロジェクトの pom.xml
ファイルを示しています。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>hibernate-postgresql-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
<hibernate.version>5.6.7</hibernate.version>
<postgresql.version>42.2.22</postgresql.version>
</properties>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.cfg.Configuration;
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.jdbc.dialect.registry.DialectRegistry;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.StandardServiceRegistryBuilder;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
public class Example {
public static void main(String[] args) {
// Hibernate の構成
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
// セッション ファクトリの取得
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
// セッションの取得
Session session = sessionFactory.openSession();
// エンティティの作成
Product product = new Product();
product.setName("Hibernate Book");
product.setPrice(12.99);
// エンティティの保存
session.beginTransaction();
session.save(product);
session.getTransaction().commit();
// エンティティの取得
Long id = product.getId();
Product retrievedProduct = session.get(Product.class, id);
System.out.println("取得した製品: " + retrievedProduct);
// セッションのクローズ
session.close();
// セッション ファクトリのクローズ
sessionFactory.close();
}
}
@Entity
@Table(name = "product")
class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Double price;
// ゲッターとセッター
}
このコードは次のことを行います。
Configuration
オブジェクトを使用して Hibernate の構成を読み込みます。StandardServiceRegistryBuilder
を使用してServiceRegistry
オブジェクトを作成します。Configuration
オブジェクトとServiceRegistry
オブジェクトを使用してSessionFactory
オブジェクトを作成します。SessionFactory
オブジェクトを使用してSession
オブジェクトを取得します。- 新しい
Product
エンティティを作成し、名前と価格を設定します。 Session
オブジェクトを使用してエンティティをデータベースに保存します。- エンティティの ID を使用してデータベースからエンティティを取得します。
- 取得したエンティティをコンソールに印刷します。
Session
オブジェクトを閉じます。
- このコードは、Maven プロジェクトで Hibernate と PostgreSQL JDBC ドライバーが既に依存関係として追加されていることを前提としています。
hibernate.cfg.xml
ファイルは、プロジェクトのルート ディレクトリに配置する必要があります。- このコードは、ログ出力と例外処理を含んでいません。本番環境で使用するには、適切なログ出力と例外処理を追加する必要があります。
アノテーションによるマッピング
hibernate.cfg.xml
ファイルを使用する代わりに、エンティティクラスにアノテーションを使用して、データベースとのマッピングを定義することができます。 これにより、コードがより簡潔で保守しやすくなります。
@Entity
@Table(name = "product")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "price")
private Double price;
// ゲッターとセッター
}
JPA を使用する
Java Persistence API (JPA) は、エンティティとデータベース間のマッピングを定義するための標準的な方法です。 Hibernate は JPA を実装しており、JPA を使用して Hibernate に接続することができます。
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("my-persistence-unit");
EntityManager entityManager = entityManagerFactory.createEntityManager();
// エンティティの作成と保存
Product product = new Product();
product.setName("Hibernate Book");
product.setPrice(12.99);
entityManager.getTransaction().begin();
entityManager.persist(product);
entityManager.getTransaction().commit();
// エンティティの取得
Long id = product.getId();
Product retrievedProduct = entityManager.find(Product.class, id);
System.out.println("取得した製品: " + retrievedProduct);
entityManager.close();
entityManagerFactory.close();
プログラマティック構成を使用する
hibernate.cfg.xml
ファイルを使用する代わりに、Java コードを使用して Hibernate を構成することができます。 これにより、構成をより柔軟に制御することができます。
Configuration configuration = new Configuration();
configuration.configure();
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = builder.build();
MetadataSources metadataSources = new MetadataSources(configuration);
Metadata metadata = metadataSources.getMetadataBuilder().build();
SessionFactory sessionFactory = metadataSources.buildSessionFactory(serviceRegistry);
// ... (セッションの取得と使用)
sessionFactory.close();
serviceRegistry.close();
CDI を使用する
Contexts and Dependency Injection (CDI) は、Java EE アプリケーションで依存関係を管理するための標準的な方法です。 Hibernate は CDI と統合されており、CDI を使用して Hibernate に接続することができます。
@ApplicationScoped
public class ProductRepository {
@Inject
private EntityManager entityManager;
public Product save(Product product) {
entityManager.persist(product);
return product;
}
public Product findById(Long id) {
return entityManager.find(Product.class, id);
}
}
java hibernate postgresql