本記事では、HibernateフレームワークとOceanBaseデータベースを使用して、テーブルの作成、データの挿入、クエリなどの基本的な操作を実現するアプリケーションの構築方法を紹介します。
前提条件
- OceanBaseデータベースがインストール済みであること。
- JDK 1.8とMavenがインストール済みであること。
- IntelliJ IDEAがインストール済みであること。
説明
本ドキュメントでコードを実行するために使用したツールはIntelliJ IDEA 2021.3.2 (Community Edition)です。個人の好みに応じて、適切なツールを選択してサンプルコードを実行することもできます。
手順
説明
本記事で示す操作手順は、Windows環境に基づいています。他のOS環境やコンパイラを使用している場合は、操作手順が若干異なる場合があります。
- OceanBaseデータベースの接続文字列を取得します。
java-oceanbase-hibernateプロジェクトをIDEAにインポートします。java-oceanbase-hibernateプロジェクト内のデータベース接続情報を変更します。java-oceanbase-hibernateプロジェクトを実行します。
ステップ1:OceanBaseデータベースの接続文字列を取得する
OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。
obclient -hxx.xx.xx.xx -P2883 -uroot@sys#cluster -p**** -Aデプロイ済みのOceanBaseデータベースに基づいて、以下のURLの該当する情報を入力します。
説明
hibernate.cfg.xmlファイルには、このURL情報が必要です。jdbc:oceanbase://host:port/schema_name?user=$user_name&password=$passwordパラメータ説明:
host:OceanBaseデータベースへの接続IPアドレス。ODP接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。port:OceanBaseデータベースへの接続ポート。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。schema_name:アクセスするスキーマ名。user_name:テナントの接続アカウント。ODP接続方式では、ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名の2種類の一般的な形式があります。直接接続方式の形式はユーザー名@テナント名です。password:アカウントのパスワード。
その他のURLパラメータの詳細については、データベースURLを参照してください。
ステップ2:java-oceanbase-hibernateプロジェクトをIDEAにインポートする
IntelliJ IDEAを開き、**File > Open...**オプションを選択します。

表示されたOpen File or Projectウィンドウで、対応するプロジェクトファイルを選択し、OKをクリックしてプロジェクトファイルのインポートを完了します。
IntelliJ IDEAは、プロジェクト内のさまざまなファイルの種類を自動的に認識し、Projectツールウィンドウで、プロジェクトのディレクトリ構造、ファイルリスト、モジュールリスト、依存関係などの情報を確認できます。Projectツールウィンドウは通常、IntelliJ IDEA画面の左側にあり、デフォルトでは開いています。Projectツールウィンドウが閉じている場合は、メニューバーのView > Tool Windows > Projectをクリックするか、ショートカットキーAlt + 1を使用して再表示できます。
説明
IntelliJ IDEAでプロジェクトをインポートすると、IntelliJ IDEAはプロジェクト内のpom.xmlファイルを自動的に検出し、ファイルに記述されている依存関係に基づいて必要な依存ライブラリを自動的にダウンロードし、プロジェクトに追加します。
プロジェクトの状況を確認します。

ステップ3:java-oceanbase-hibernate プロジェクトのデータベース接続情報を修正する
ステップ1:OceanBaseデータベースの接続文字列を取得する の情報に基づいて、hibernate.cfg.xml ファイル内のデータベース接続情報を修正します。
例:
- データベースドライバーの名前:
com.oceanbase.jdbc.Driver - OBServerノードのIPアドレスは
10.10.10.1です。 - アクセスポートは2881を使用します。
- アクセスするスキーマ名は
sysです。 - テナントの接続アカウントは
sys@xyoracleです。xyoracleはOceanBaseデータベースで作成されたOracleモードのユーザーテナントであり、sysはテナントxyoracleのユーザー名です。 - パスワードは
******です。
サンプルコードは以下のとおりです:
<property name="hibernate.connection.driver_class">com.oceanbase.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:oceanbase://10.10.10.1:2881/sys</property>
<property name="hibernate.connection.username">sys@xyoracle</property>
<property name="hibernate.connection.password">******</property>
ステップ4:java-oceanbase-hibernate プロジェクトを実行する
実行パス
- プロジェクト構造の src > test > java から
TestHibernate.javaファイルを見つけます。 - ツールメニューバーで 実行(U) > 実行 > TestHibernate を選択するか、右上の緑色の三角形を直接クリックして実行します。
- IDEAのコンソールを使用して、プロジェクトのログ情報と出力結果を確認します。
実行結果
User{id=2, name='update'}
User{id=3, name='user_insert3'}
User{id=4, name='user_insert4'}
User{id=5, name='user_insert5'}
プロジェクトコードについて
java-oceanbase-hibernate をクリックしてプロジェクトコードをダウンロードします。これは java-oceanbase-hibernate.zip という圧縮ファイルです。
解凍すると、java-oceanbase-hibernate という名前のフォルダが作成されます。ディレクトリ構造は以下のとおりです:
│--pom.xml
│
├─.idea
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─oceanbase
│ │ │ ├─dao
│ │ │ │ └─--UserDao.java
│ │ │ │
│ │ │ └─pojo
│ │ │ └─--User.java
│ │ │
│ │ └─resources
│ │ │--hibernate.cfg.xml
│ │ │
│ │ └─com
│ │ └─oceanbase
│ │ └─pojo
│ │ └─--User.hbm.xml
│ │
│ └─test
│ └─java
│ └─--TestHibernate.java
│
└─target
ファイルの説明:
pom.xml:Mavenプロジェクトの設定ファイルで、プロジェクトの依存関係、プラグイン、ビルドなどの情報が含まれます。.idea:IDE(統合開発環境)で使用されるディレクトリで、プロジェクト関連の設定情報を格納します。src:プロジェクトのソースコードを格納するディレクトリです。main: 主要なソースコードとリソースファイルを格納するディレクトリ。java: Javaソースコードを格納するディレクトリ。com: Javaパッケージのルートディレクトリ。oceanbase: プロジェクトのルートディレクトリ。dao: データアクセスオブジェクト(Data Access Object)パッケージを格納するディレクトリで、データベースやその他のデータストレージサービスへのアクセスに使用されます。UserDao.java:ユーザーデータアクセスオブジェクトで、ユーザーデータの追加、削除、変更、検索などの操作に使用されます。User.java:ユーザー永続化オブジェクトで、ユーザーデータテーブルのフィールドをマッピングするために使用されます。pojo: 永続化オブジェクト(Plain Old Java Object)を格納するディレクトリで、データベーステーブルに対応するJavaクラスを保存します。データベーステーブルやその他のデータストレージ構造をマッピングするために使用されます。resources: リソースファイルを格納するディレクトリで、設定ファイルやSQLファイルなどが含まれます。hibernate.cfg.xml: Hibernateの設定ファイルで、Hibernateの基本パラメータやデータソースの設定などの情報を定義します。User.hbm.xml: ユーザー永続化オブジェクトのマッピングファイルで、ユーザー永続化オブジェクトとユーザーデータテーブル間のマッピング関係を定義します。test: テストコードとリソースファイルを格納するディレクトリ。TestHibernate.java: Hibernateのテスト用Javaクラスです。target: コンパイル済みのClassファイルやJarパッケージなどのファイルを格納するディレクトリ。
pom.xmlコードの紹介
説明
例を確認するだけの場合は、デフォルトのコードをそのまま使用し、変更は不要です。以下の説明に従って、ご自身の要件に応じて pom.xml ファイルを変更することもできます。
pom.xml 設定ファイルの内容は以下のとおりです:
ファイル宣言ステートメント。
このファイルがXMLファイルであり、使用しているXMLバージョンが
1.0、文字エンコーディング方式がUTF-8であることを宣言します。コード:
<?xml version="1.0" encoding="UTF-8"?>POMの名前空間とPOMモデルバージョンを設定します。
xmlnsを使用して、POMの名前空間をhttp://maven.apache.org/POM/4.0.0と指定します。xmlns:xsiを使用して、XML名前空間をhttp://www.w3.org/2001/XMLSchema-instanceと指定します。xsi:schemaLocationを使用して、POMの名前空間をhttp://maven.apache.org/POM/4.0.0と指定し、POMのXSDファイルの場所をhttp://maven.apache.org/xsd/maven-4.0.0.xsdと指定します。<modelVersion>要素を使用して、このPOMファイルで使用するPOMモデルバージョンを4.0.0と指定します。
コード:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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>
</project>
基本情報を設定します。
<groupId>を使用して、プロジェクト識別子をcom.oceanbaseと指定します。<artifactId>を使用して、プロジェクトの依存関係をjava-oceanbase-hibernateと指定します。<version>を使用して、プロジェクトのバージョン番号を1.0-SNAPSHOTと指定します。
コード:
<groupId>com.oceanbase</groupId>
<artifactId>java-oceanbase-hibernate</artifactId>
<version>1.0-SNAPSHOT</version>
<build>を使用して、プロジェクトのビルドプロセスを定義します。<plugins>を使用して、プロジェクトで設定するプラグインを指定します。<plugin>を使用して、プロジェクトで1つのプラグインを設定します。<groupId>を使用して、プロジェクト識別子をorg.apache.maven.pluginsと指定します。<artifactId>を使用して、プロジェクトの依存関係をmaven-compiler-pluginと指定します。<configuration>を使用して、設定するプラグインのパラメータを指定します。<source>を使用して、コンパイラのソースコードバージョンを8と指定します。<target>を使用して、コンパイラのターゲットコードバージョンを8と指定します。
コード:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>を使用して、プロジェクトが依存するコンポーネントを定義します。依存関係が属する組織を
com.oceanbase、名前をoceanbase-client、バージョン番号を2.4.2と指定します。コード:
<dependencies> <dependency> <groupId>com.oceanbase</groupId> <artifactId>oceanbase-client</artifactId> <version>2.4.2</version> </dependency> </dependencies>依存関係が属するテストフレームワークを
junit、名前をjunit、バージョン番号を4.13と指定します。コード:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> </dependency> </dependencies>依存関係が属するフレームワークを
org.hibernate、コアライブラリをhibernate-core、バージョン番号を5.2.17.Finalと指定します。コード:
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.17.Final</version> </dependency> </dependencies>依存関係が属するフレームワークを
org.hibernate、データソースライブラリをhibernate-c3p0、バージョン番号を5.2.17.Finalと指定します。
**コード:**
```java
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.2.17.Final</version>
</dependency>
</dependencies>
```
User.hbm.xmlコードの紹介
User.hbm.xml ファイルは、Hibernateのマッピングファイルであり、Javaオブジェクトをデータベースのテーブルにマッピングするために使用されます。
User.hbm.xml ファイルのコードは、主に以下の部分で構成されています:
ファイル宣言ステートメント。
このファイルがXMLファイルであり、使用しているXMLバージョンが
1.0、文字エンコーディング方式がUTF-8であることを宣言します。同時に、HibernateマッピングファイルのDTDバージョンと場所を指定し、DTDドキュメントタイプをhibernate-mapping、バージョンを3.0、言語をEN、ファイルのURLをhttp://www.hibernate.org/dtd/hibernate-mapping-3.0.dtdと指定します。コード:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">マッピングファイルの設定。
Userという名前のエンティティクラスをtest_hibernate_oracleという名前のデータベーステーブルにマッピングするHibernateマッピングファイルを定義します。package属性を使用して、マッピングファイル内のJavaパッケージをcom.oceanbase.pojoと指定します。classタグを使用してデータテーブル内のデータをマッピングし、name属性でJavaクラス名をUser、table属性でデータベーステーブル名をtest_hibernate_oracleと指定します。idを使用して主キープロパティを定義し、name属性でJavaクラスUserのメンバー変数をid、column属性でデータベースフィールド名をUSER_IDと指定します。generatorを使用して主キー生成戦略を定義し、class属性で主キージェネレーターのタイプをsequence、param要素でデータベース内のシーケンス名をSQ_USERと指定します。name属性でこのプロパティがデータベーステーブル内のUSER_NAME列に対応することを指定し、データ型を文字列と指定します。
コード:
<hibernate-mapping package="com.oceanbase.pojo"> <class name="User" table="test_hibernate_oracle"> <id name="id" column="USER_ID"> <generator class="sequence"> <param name="sequence">SQ_USER</param> </generator> </id> <property name="name" column="USER_NAME" type="string"/> </class> </hibernate-mapping>
hibernate.cfg.xmlのコード紹介
hibernate.cfg.xml ファイルはHibernateの設定ファイルであり、Hibernateの実行環境とデータベース接続パラメータを設定するために使用されます。
hibernate.cfg.xml ファイルのコードは、主に以下の部分で構成されています:
ファイル宣言ステートメント。
このファイルがXMLファイルであり、使用しているXMLバージョンが
1.0、文字エンコーディング方式がUTF-8であることを宣言します。同時に、Hibernate設定ファイルのDTDバージョンと場所を指定し、DTDドキュメントタイプをhibernate-configuration、バージョンを3.0、言語をEN、ファイルのURLをhttp://www.hibernate.org/dtd/hibernate-configuration-3.0.dtdと指定します。コード:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">configurationパラメータの設定。
<hibernate-configuration> ルート要素内の <session-factory> 要素を使用して、Hibernateのセッションファクトリを設定します。これはセッションオブジェクトの作成と管理に使用されます。セッションファクトリには、データベース接続のためのドライバークラス名、URL、ユーザー名とパスワード、接続プールの関連パラメータ、データベース方言、SQL出力とフォーマット、データベーステーブルの自動作成、現在のセッションコンテキスト、バッチ処理、二次キャッシュなどの設定が含まれます。
- データベース情報の設定。
Hibernateとデータベース接続のパラメータを設定します。これには、データベース接続のためのドライバークラス名、URL、ユーザー名、パスワードが含まれます。
* `hibernate.connection.driver_class` を使用して、データベースドライバーを `com.oceanbase.jdbc.Driver` と指定します。OceanBaseデータベースとの接続を確立するために使用されます。
* `hibernate.connection.url` 要素を使用して、データベースのURLを指定します。データベースのアドレス、ポート番号、データベース名などの情報が含まれます。
* `hibernate.connection.username` 要素を使用して、データベース接続用のユーザー名を指定します。
* `hibernate.connection.password` 要素を使用して、データベース接続用のパスワードを指定します。
**コード:**
```xml
<property name="hibernate.connection.driver_class">com.oceanbase.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:oceanbase://host:port/schema_name</property>
<property name="hibernate.connection.username">user_name</property>
<property name="hibernate.connection.password">******</property>
```
- 接続プール情報の設定。
Hibernateが使用する接続プールの関連パラメータを設定します。接続プールをC3P0と指定します。パラメータの設定には、接続プールの最大接続数と最小接続数、タイムアウト時間、接続の最大アイドル時間、キャッシュされるStatementオブジェクトの数、接続のアイドルテスト時間、一度に取得する接続数、接続の検証方法が含まれます。
<main id="notice" type='explain'>
<h4>説明</h4>
<p>以下のパラメータは参考用です。サポートされているパラメータの完全なリストではありません。他のパラメータを設定する必要がある場合は、関連ドキュメントを参照して詳細なパラメータ情報を入手してください。</p>
</main>
* `hibernate.connection.provider_class` を使用して、接続プールをC3P0と指定します。データベース接続の作成と解放を管理するために使用されます。
* `hibernate.c3p0.max_size` を使用して、接続プールの最大接続数を60と指定します。
* `hibernate.c3p0.min_size` を使用して、接続プールの最小接続数を30と指定します。
* `hibernate.c3p0.checkoutTimeout` を使用して、接続プールが接続を取得するタイムアウト時間を30000ミリ秒と指定します。
* `hibernate.c3p0.timeout` を使用して、接続プールの最大アイドル時間を2000ミリ秒と指定します。この時間を超えると接続は閉じられます。
* `hibernate.c3p0.max_statements` を使用して、接続プールでキャッシュされる最大SQLステートメント数を100と指定します。
* `hibernate.c3p0.idle_test_period` を使用して、接続プール内のアイドル接続の検出周期を3000ミリ秒と指定します。
* `hibernate.c3p0.acquire_increment` を使用して、接続プールが動的に増加する際の接続数の増分を3と指定します。
* `hibernate.c3p0.validate` を使用して、接続プール接続時の検証をtrueと指定します。
**コード:**
```xml
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">60</property>
<property name="hibernate.c3p0.min_size">30</property>
<property name="hibernate.c3p0.checkoutTimeout">30000</property>
<property name="hibernate.c3p0.timeout">20000</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquire_increment">3</property>
<property name="hibernate.c3p0.validate">true</property>
```
- SQLインタラクション情報の設定。 Hibernateとデータベース接続の関連情報を設定します。データベース方言、SQLの出力とフォーマット、テーブルの自動作成、現在のセッションコンテキスト、バッチ処理サイズ、キャッシュの使用、マッピングファイルの読み込みが含まれます。
dialectを使用して、使用するデータベース方言をOracle 12cと指定します。特定のデータベースとの互換性を確保するために使用されます。hibernate.show_sqlを使用して、Hibernateが生成したSQLステートメントをコンソールに出力するかどうかを設定します。hibernate.format_sqlを使用して、SQLステートメントをフォーマットして出力するかどうかを設定します。hbm2ddl.autoを使用して、テーブルの自動作成を設定します。current_session_context_classを使用して、スレッドレベルの現在のセッションコンテキストを使用することを指定します。hibernate.jdbc.batch_sizeを使用して、バッチ処理のサイズを設定します。hibernate.cache.use_second_level_cacheを使用して、二次キャッシュを有効にするかどうかを設定します。- マッピングファイルとして
com/oceanbase/pojo/User.hbm.xmlを読み込むことを指定します。
**コード:**
```xml
<property name="dialect">org.hibernate.dialect.Oracle12cDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.jdbc.batch_size">10</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<mapping resource="com/oceanbase/pojo/User.hbm.xml"/>
```
UserDao.javaコードの紹介
UserDao.java ファイルは、ユーザーデータアクセスオブジェクト(DAO)クラスを通じて、Sessionオブジェクトを使用してユーザーデータの追加、削除、変更、検索操作を実装しています。
UserDao.java ファイルのコードは、主に以下の部分で構成されています:
他のクラスとインターフェースのインポート。
このファイルには以下のインターフェースとクラスが含まれていることを宣言します:
Userクラス:ユーザーオブジェクトを操作するために使用します。Sessionクラス:データベースとのやり取りに使用します。SessionFactoryクラス:Sessionインスタンスを作成するために使用します。Transactionクラス:データベーストランザクションを管理するために使用します。Configurationクラス:Hibernateの設定ファイルを読み込むために使用します。Queryクラス:クエリ操作を実行するために使用します。Listインターフェース:クエリ結果の集合を操作するために使用します。
コード:
import com.oceanbase.pojo.User; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.query.Query; import java.util.List;UserDaoクラスの定義。
UserDao のJavaクラスは、データアクセスオブジェクトとして、ユーザーオブジェクトの永続化操作に使用されます。このクラスは、データベースとのやり取りに関連する一連のメソッドをカプセル化し、ユーザーオブジェクトの追加、削除、変更、検索などの操作を行います。UserDao クラスのメソッドを呼び出すことで、データベースと簡単にやり取りし、永続化操作を実現できます。
UserDaoクラスのインスタンスを初期化します。オブジェクト初期化ブロックを使用して、クラスのインスタンス化プロセスで
Sessionオブジェクトを初期化します。まず、
Configurationオブジェクトを作成し、configureメソッドを呼び出してHibernateの設定ファイル(hibernate.cfg.xml)を読み込みます。次に、buildSessionFactoryメソッドを呼び出してSessionFactoryオブジェクトを作成します。最後に、openSessionメソッドを呼び出してSessionオブジェクトを作成し、session変数に代入します。コード:
private Session session; { Configuration cfg = new Configuration().configure(); // Create SessionFactory SessionFactory sessionFactory = cfg.buildSessionFactory(); session = sessionFactory.openSession(); } //Read the hibernate.cfg.xml fileIDを指定して対応するユーザー情報を検索します。
selectUserByIdメソッドを使用して、指定されたIDパラメータに対応するユーザー情報を検索します。sessionのgetメソッドを使用し、渡されたUser.classとIDパラメータに基づいて、データベースから対応するIDのUserレコードを取得し、user変数に格納します。コード:
public User selectUserById(int ID) { User user = session.get(User.class, ID); return user; }ユーザー名に基づいてユーザー情報を検索します。
selectUserbyNameメソッドを使用して、ユーザー名に基づいてユーザー情報を検索します。 まず、HQL(Hibernate Query Language)ステートメントを定義します。これは、指定された名前のユーザーデータを検索するために使用されます。テーブル名はtest_hibernate_oracle、テーブルエイリアスはu、検索フィールド名はnameです。SessionオブジェクトのcreateQueryメソッドを使用してQueryオブジェクトを作成し、HQLステートメントとエンティティクラスをパラメータとして渡します。QueryオブジェクトのsetParameterメソッドを使用してクエリパラメータを設定します。ここで、0はパラメータの位置を表し、nameはパラメータの値を表します。Queryオブジェクトのlistメソッドを使用してクエリを実行し、検索結果をUserオブジェクトのリストに変換します。コード:
public List<User> selectUserbyName(String name) { String sql = "FROM test_hibernate_oracle u WHERE u.name =?"; Query<User> query = session.createQuery(sql, User.class); query.setParameter(0, name); List<User> users = query.list(); return users; }すべてのユーザーデータを検索します。
selectUserメソッドを使用して、すべてのユーザーデータを検索するメソッドを実装します。 すべてのユーザーデータを検索するためのSQLステートメントを定義します。SessionオブジェクトのcreateNativeQueryメソッドを使用してQueryオブジェクトを作成し、SQLステートメントをパラメータとして渡します。次に、addEntityメソッドを使用してエンティティクラスUserをクエリに追加し、検索結果をUserオブジェクトのリストに変換します。QueryオブジェクトのgetResultListメソッドを使用してクエリを実行し、検索結果をUserオブジェクトのリストに変換します。コード:
public List<User> selectUser() { String sql = "SELECT * FROM test_hibernate_oracle"; Query<User> query = session.createNativeQuery(sql).addEntity(User.class); List<User> users = query.getResultList(); return users; }ユーザーデータを挿入します。
insertUserメソッドを使用して、ユーザー情報を挿入します。User型のパラメータuserを指定し、挿入するユーザーオブジェクトを渡します。Hibernate SessionのbeginTransactionメソッドを呼び出してトランザクションオブジェクトを作成し、変数beginTransactionに格納します。saveメソッドを使用してユーザーオブジェクトをデータベースに保存します。SessionのgetTransactionメソッドを呼び出して現在のトランザクションを取得し、commitメソッドを呼び出してトランザクションをコミットします。これにより、以前の操作がデータベースに永続化され、挿入操作の結果が返されます。コード:
public int insertUser(User user) { // open transaction Transaction beginTransaction = session.beginTransaction(); session.save(user); session.getTransaction().commit(); return 1; }ユーザーデータを削除します。
deleteUserByIdメソッドを使用して、データベースから渡されたIDに対応するユーザーレコードを削除します。 整数型パラメータidを指定し、削除するユーザーIDを渡します。Hibernate SessionのbeginTransactionメソッドを呼び出して新しいトランザクションを開始します。getメソッドを使用して、指定されたユーザーIDとエンティティクラスタイプ(User.class)に対応するユーザーオブジェクトを取得します。deleteメソッドを使用してユーザーオブジェクトを削除します。SessionのgetTransactionメソッドを呼び出して現在のトランザクションを取得し、commitメソッドを呼び出してトランザクションをコミットします。これにより、ユーザー情報の削除がデータベースに永続化され、削除操作の結果が返されます。コード:
public int deleteUserById(int id) { // open transaction session.beginTransaction(); User user = session.get(User.class, id); session.delete(user); session.getTransaction().commit(); return 1; }ユーザーデータを変更します。
updateUserByIdメソッドを使用して、対応するユーザー情報を更新します。User型のパラメータuserを指定し、更新するユーザーデータを指定します。SessionオブジェクトのbeginTransactionメソッドを使用してトランザクションを開始します。Sessionオブジェクトのgetメソッドを使用して、ユーザーIDに対応するUserオブジェクトを取得します。Sessionオブジェクトのmergeメソッドを使用して、渡されたUserオブジェクトと取得したUserオブジェクトをマージし、渡されたユーザーデータをデータベースに更新します。SessionオブジェクトのgetTransactionメソッドを使用して現在のトランザクションを取得し、commitメソッドを呼び出してトランザクションをコミットします。これにより、変更操作の結果が返されます。コード:
public int updateUserById(User user) { // open transaction session.beginTransaction(); User user1 = session.get(User.class, user.getId()); session.merge(user); session.getTransaction().commit(); return 1; }
User.javaコードの紹介
User.java ファイルは、ユーザーデータアクセスオブジェクト(DAO)クラスを通じて、Sessionオブジェクトを使用してユーザーデータの追加、削除、変更、検索操作を実装します。
User.java ファイルのコードには、主に以下の部分が含まれます:
他のクラスのインポート。
このファイルがJPAアノテーションを使用して関連クラスとデータベーステーブルのマッピング関係を設定していることを宣言します:
Columnアノテーション:エンティティクラスのプロパティとデータベーステーブルの列との対応関係を識別するために使用されます。Entityアノテーション:データベース内のテーブルをマッピングするために使用されます。GeneratedValueアノテーション:このプロパティの値が自動生成されることを示すために使用されます。GenerationTypeアノテーション:主キーの生成戦略を指定するために使用されます。Idアノテーション:一意の識別プロパティを指定するために使用されます。Tableアノテーション:エンティティクラスに対応するテーブル名を示すために使用されます。
コード:
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table;データベース内のテーブルのマッピング。
データベーステーブルのエンティティクラスをマッピングし、エンティティクラスに対応するテーブル名を
test_hibernate_oracleと指定します。コード:
@Entity @Table(name = "test_hibernate_oracle")Userクラスの定義。データベース内の
test_hibernate_oracleという名前のテーブルとのマッピングに使用されます。idとnameの2つのプロパティを定義します。 アノテーションを使用して、Userクラスのidとnameプロパティとデータベーステーブルの列との対応関係を識別します。@Idアノテーションを使用してidプロパティを主キーとして識別し、@GeneratedValueアノテーションで主キーの生成戦略をシーケンスと指定します。@Columnアノテーションでプロパティとデータベーステーブルの列とのマッピング関係を指定します。idプロパティはユーザーIDの格納に使用され、nameプロパティはユーザー名の格納に使用されます。コード:
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "user_id") private int id; @Column(name = "user_name") private String name;Userオブジェクトの作成。Userクラスの2つのコンストラクタメソッドを定義し、Userオブジェクトの作成に使用します。 1つのコンストラクタメソッドはパラメータなしで、Hibernateクエリ操作に使用されます。もう1つのコンストラクタメソッドはパラメータありで、idとnameプロパティの初期化に使用されます。コード:
public User() { } public User(int id, String name) { this.id = id; this.name = name; }idとnameの値の取得と設定。Userクラスの4つのメソッドを定義し、idとnameプロパティの値の取得と設定に使用します。getIdメソッドはid値を取得するために使用され、setIdメソッドはid値を設定するために使用されます。getNameメソッドは、ユーザー名nameの値を取得するために使用されます。setNameメソッドは、ユーザー名nameの値を設定するために使用されます。コード:
public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }Userオブジェクトの文字列表現を返す。UserクラスのtoStringメソッドをオーバーライドし、Userオブジェクトの文字列表現を返すために使用します。@Overrideを定義して、親クラスの同名メソッドをオーバーライドします。toStringメソッドを定義し、Userオブジェクトの文字列表現を返すために使用します。文字列連結を使用して、idとnameプロパティの値を文字列としてフォーマットし、呼び出し元のUserに返します。コード:
@Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + '}'; }
TestHibernate.javaのコード紹介
TestHibernate.java ファイルは、UserDao オブジェクトに対して挿入、削除、更新、およびクエリ操作を実行することで、Hibernateの基本的なデータベース操作機能を示します。
TestHibernate.java ファイルのコードは、主に以下の部分で構成されています:
他のクラスとインターフェースのインポート。
このファイルに関連するクラスとインターフェースを宣言します。これには、
UserDao、User、Session、SessionFactory、Configurationなどが含まれます。UserDaoクラス:ユーザー関連のデータベース操作を実行するために使用されます。Userクラス:ユーザーオブジェクトを操作するために使用されます。Sessionクラス:データベースとのセッション操作に使用されます。SessionFactoryクラス:Sessionオブジェクトを作成するために使用されます。Configurationクラス:Hibernateを設定するために使用されます。SessionImplクラス:基盤となるJDBC接続を取得するために使用されます。Testアノテーション:テストメソッドをマークするために使用されます。IOExceptionクラス:I/O例外を処理するために使用されます。Connectionクラス:JDBC接続を取得するために使用されます。SQLExceptionクラス:SQL例外を処理するために使用されます。Listクラス:クエリ結果セットを格納するために使用されます。UUIDクラス:一意の識別子を生成するために使用されます。
コード:
import com.oceanbase.dao.UserDao; import com.oceanbase.pojo.User; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.internal.SessionImpl; import org.junit.Test; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import java.util.UUID;testHibernateメソッドの定義。testHibernateメソッドには、挿入、削除、更新、およびクエリなどの基本操作が含まれます。UserDaoオブジェクトを作成し、ループ処理で5件のユーザーデータを挿入します。insertUserメソッドを呼び出してユーザーデータを挿入します。deleteUserByIdメソッドを呼び出して、idが1のユーザーデータを削除します。updateUserByIdメソッドを呼び出して、idが2のユーザーデータを更新します。selectUserメソッドを呼び出して、すべてのユーザーデータをクエリします。クエリ結果をイテレーションしてコンソールに出力します。コード:
public class TestHibernate { @Test public void testHibernate() throws SQLException, IOException { UserDao userDao = new UserDao(); for (int i = 1; i <= 5; i++) { userDao.insertUser(new User(i, "user_insert" + i)); } int deleteUserById = userDao.deleteUserById(1); int update = userDao.updateUserById(new User(2, "update")); List<User> users = userDao.selectUser(); users.forEach(System.out::println); } }
全コード表示
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.oceanbase</groupId>
<artifactId>java-oceanbase-hibernate</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<dependency>
<groupId>com.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.17.Final</version>
</dependency>
<!-- Hibernate c3p0 connection pool-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.2.17.Final</version>
</dependency>
</dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.oceanbase.pojo">
<class name="User" table="test_hibernate_oracle">
<!-- Configure primary key generation strategy -->
<id name="id" column="USER_ID">
<generator class="sequence">
<param name="sequence">SQ_USER</param>
</generator>
</id>
<!-- Configuration Tables and Properties -->
<property name="name" column="USER_NAME" type="string"/>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.oceanbase.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:oceanbase://host:port/schema_name</property>
<property name="hibernate.connection.username">user_name</property>
<property name="hibernate.connection.password">******</property>
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">60</property>
<property name="hibernate.c3p0.min_size">30</property>
<property name="hibernate.c3p0.checkoutTimeout">30000</property>
<property name="hibernate.c3p0.timeout">20000</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquire_increment">3</property>
<property name="hibernate.c3p0.validate">true</property>
<property name="dialect">org.hibernate.dialect.Oracle12cDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.jdbc.batch_size">10</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<mapping resource="com/oceanbase/pojo/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
package com.oceanbase.dao;
import com.oceanbase.pojo.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import java.util.List;
public class UserDao {
private Session session;
{
Configuration cfg = new Configuration().configure();
// Create SessionFactory
SessionFactory sessionFactory = cfg.buildSessionFactory();
session = sessionFactory.openSession();
} //Read the hibernate.cfg.xml file
// private Session session = HibernateUtil.getSession();
public User selectUserById(int ID) {
User user = session.get(User.class, ID);
return user;
}
public List<User> selectUserbyName(String name) {
String sql = "FROM test_hibernate_oracle u WHERE u.name =?";
Query<User> query = session.createQuery(sql, User.class);
query.setParameter(0, name);
List<User> users = query.list();
return users;
}
public List<User> selectUser() {
String sql = "SELECT * FROM test_hibernate_oracle";
Query<User> query = session.createNativeQuery(sql).addEntity(User.class);
List<User> users = query.getResultList();
return users;
}
public int insertUser(User user) {
// open transaction
Transaction beginTransaction = session.beginTransaction();
session.save(user);
session.getTransaction().commit();
return 1;
}
public int deleteUserById(int id) {
// open transaction
session.beginTransaction();
User user = session.get(User.class, id);
session.delete(user);
session.getTransaction().commit();
return 1;
}
public int updateUserById(User user) {
// open transaction
session.beginTransaction();
User user1 = session.get(User.class, user.getId());
session.merge(user);
session.getTransaction().commit();
return 1;
}
}
package com.oceanbase.pojo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "test_hibernate_oracle")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "user_id")
private int id;
@Column(name = "user_name")
private String name;
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
import com.oceanbase.dao.UserDao;
import com.oceanbase.pojo.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.internal.SessionImpl;
import org.junit.Test;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.UUID;
public class TestHibernate {
@Test
public void testHibernate() throws SQLException, IOException {
UserDao userDao = new UserDao();
for (int i = 1; i <= 5; i++) {
userDao.insertUser(new User(i, "user_insert" + i));
}
int deleteUserById = userDao.deleteUserById(1);
int update = userDao.updateUserById(new User(2, "update"));
List<User> users = userDao.selectUser();
users.forEach(System.out::println);
}
}
関連ドキュメント
OceanBase Connector/Jの詳細については、OceanBase JDBCドライバを参照してください。
クリックしてjava-oceanbase-hibernateサンプルプロジェクトをダウンロード