本記事では、JfinalフレームワークとOceanBaseデータベースを使用して、テーブルの作成、データの挿入、データのクエリなどの基本操作を実現するアプリケーションの構築方法を紹介します。
前提条件
- OceanBaseデータベースがインストール済みであること。
- JDK 1.8とMavenがインストール済みであること。
- IntelliJ IDEAがインストール済みであること。
説明
この記事でコードを実行するために使用したツールは、IntelliJ IDEA 2021.3.2(Community Edition)バージョンです。ご自身の好みに合わせて、適切なツールを選択してサンプルコードを実行することも可能です。
操作手順
説明
本記事で示されている操作手順は、Windows環境に基づいています。他のOS環境やコンパイラを使用している場合は、操作手順が若干異なる場合があります。
- OceanBaseデータベースの接続文字列を取得します。
java-oceanbase-JfinalプロジェクトをIDEAにインポートします。java-oceanbase-JfinalプロジェクトのTomcat実行環境を構築します。java-oceanbase-Jfinalプロジェクトのデータベース接続情報を変更します。java-oceanbase-Jfinalプロジェクトを実行します。
ステップ1:OceanBaseデータベースの接続文字列を取得する
OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。
obclient -hxx.xx.xx.xx -P2883 -uroot@sys#cluster -p**** -Aデプロイ済みのOceanBaseデータベースに基づいて、以下のURLの対応する情報を入力します。
説明
config.propertiesファイルに、この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-Jfinal プロジェクトを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-Jfinal プロジェクトのTomcat動作環境を構築する
Tomcat 8.5.95バージョンをダウンロードします。 Apache Tomcat公式Webサイト からTomcat 8.5.95バージョンの圧縮ファイルをダウンロードします。ダウンロードした圧縮ファイルを、Tomcatをインストールするディレクトリに解凍します。
IDEAでTomcatを設定します。 IntelliJ IDEAを開き、File メニューから Settings > Plugins を選択します。Settings ウィンドウの中央にある検索ボックスで Smart Tomcat を検索し、ダウンロード後 Apply をクリックします。すると、Settings ウィンドウの左下に Tomcat Server タブが表示されます。Tomcat Server タブに移動して、右側の + ボタンをクリックし、解凍したTomcatディレクトリを選択し、Apply をクリックし、OK をクリックして設定を完了します。

Tomcat実行設定を作成します。
IDEAの上部ツールバーで、Run > Edit Configurations を選択します。Run/Debug Configurations ウィンドウで、+ ボタンをクリックして、Tomcat Server を選択します。実行するサーバーの名前を Name に入力し、Configuration 選択ボックスで、インストールしたバージョンに対応する Tomcat Server を選択し、Context path の値を
/に変更し、SSL port の値を8080と入力します。Before launch 選択ボックスで、+ をクリックして、Launch Web Browser を選択します。Edit をクリックして、URLにhttp://localhost:8080/hello/getDataと入力します。Apply をクリックしてから OK をクリックし、設定を完了します。
Tomcatサーバーを実行します。
IDEAの上部のツールバーで、作成したTomcat実行のための設定を選択します。緑色の三角形 の実行ボタンをクリックしてTomcatサーバーを起動します。IDEAの Run ウィンドウでTomcatサーバーの起動ログを確認できます。
ステップ4:java-oceanbase-Jfinal プロジェクトのデータベース接続情報を修正する
ステップ1:OceanBaseデータベース接続文字列を取得する に記載されている情報に基づいて、config.properties ファイルのデータベース接続情報を修正します。
例:
- データベースドライバーの名前:
com.oceanbase.jdbc.Driver - OBServerノードのIPアドレスは
10.10.10.1です。 - アクセスポートは2881を使用します。
- アクセスするスキーマ名は
sysです。 - テナントの接続アカウントは
sys@xyoracleです。xyoracleはOceanBaseデータベース内に作成されたOracleモードのユーザーテナントであり、sysはテナントxyoracleのユーザー名です。 - パスワードは
******です。
サンプルコードは以下のとおりです:
db.app.driver=com.oceanbase.jdbc.Driver
db.app.url=jdbc:oceanbase://10.10.10.1:2881/sys
db.app.user=sys@xyoracle
db.app.password=******
db.app.poolInitialSize=3
db.app.poolMaxSize=10
db.app.connectionTimeoutMillis=100
db.app.validationQuery=select 1 from dual
ステップ5:java-oceanbase-Jfinal プロジェクトを実行する
実行パス。
IDEAの上部のツールバーで、作成したTomcat実行のための設定を選択します。緑色の三角形 の実行ボタンをクリックしてTomcatサーバーを起動します。GoogleまたはIEブラウザでパス
http://localhost:8080/hello/getDataを開き、実行結果を確認します。実行結果。
[{"ID":1,"NAME":"John"},{"ID":2,"NAME":"Jane"}]
プロジェクトコードについて
java-oceanbase-Jfinal をクリックして、java-oceanbase-Jfinal という名前の圧縮ファイルをダウンロードします。
解凍すると、java-oceanbase-Jfinal という名前のフォルダが作成されます。ディレクトリ構造は以下のとおりです:
│--pom.xml
│
├─.idea
│
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─oceanbase
│ │ │ └─testjfinal
│ │ │ ├─config
│ │ │ │ └─UserConfig.java
│ │ │ │
│ │ │ ├─controller
│ │ │ │ └─UserController.java
│ │ │ │
│ │ │ └─pojo
│ │ │ └─User.java
│ │ │
│ │ ├─resources
│ │ │ └─config.properties
│ │ │
│ │ └─webapp
│ │ └─WEB-INF
│ │ └─web.xml
│ │
│ │
│ │
│ └─test
│ └─java
│
│
└─target
ファイルの説明:
pom.xml:Mavenプロジェクトの設定ファイルは、プロジェクトの依存関係、プラグイン、ビルドなどの情報が含まれます。.idea:IDE(統合開発環境)で使用されるディレクトリで、プロジェクト関連の設定情報を格納するために使用されます。src:通常、プロジェクトのソースコードを格納するディレクトリを表すために使用されます。main: 主要なソースコードとリソースファイルを格納するディレクトリ。java: Javaソースコードを格納するディレクトリ。com: Javaパッケージを格納するルートディレクトリ。oceanbase: プロジェクトを格納するルートディレクトリ。testjfinal:JFinalフレームワークに関連するコードを格納します。config:アプリケーションの設定クラスファイルを含む、設定ファイルディレクトリ。UserConfig.java:ユーザー設定クラスファイル。controller:アプリケーションのコントローラークラスファイルを含む、コントローラーディレクトリ。UserController.java:ユーザーコントローラークラスファイル。pojo: JavaBeanまたはエンティティクラスを格納します。User.java:ユーザーエンティティクラスを格納します。resources: 設定ファイルやSQLファイルなどの、リソースファイルを格納するディレクトリ。config.properties: データベース接続情報の設定ファイルを格納します。webapp:Webアプリケーションのディレクトリで、Webアプリケーションの静的リソースと設定ファイルが含まれています。WEB-INF:WebアプリケーションのWEB-INFディレクトリで、設定ファイルやその他の保護されたリソースファイルを格納するために使用されます。web.xml:Webアプリケーションのデプロイメント記述子ファイル。test: テストコードとリソースファイルを格納するディレクトリです。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-jfinalと指定します。<version>を使用して、プロジェクトのバージョン番号を1.0-SNAPSHOTと指定します。<packaging>を使用して、プロジェクトのパッケージング方式をWARファイル(Webアプリケーションアーカイブファイル)と指定します。
コード:
<groupId>com.oceanbase</groupId> <artifactId>java-oceanbase-jfinal</artifactId> <version>1.0-SNAPSHOT</version> <!-- Packaging method (default to jar) --> <packaging>war</packaging>Mavenバージョンを設定します。
<maven.compiler.source> と <maven.compiler.target> を使用して、コンパイラのソースコードバージョンとターゲットコードバージョンをどちらもJava 8と指定します。
コード:
<properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties>コア依存関係を設定します。
依存関係が属する組織をcom.jfinal、名前をjfinal、バージョン番号を5.0.6と指定します。この依存関係を使用することで、JFinalフレームワークの機能を利用できます。
コード:
<dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> <version>5.0.6</version> </dependency>依存関係が属する組織を
com.alibaba、名前をdruid、バージョン番号を1.2.8と指定します。この依存関係を使用することで、Druidライブラリを利用して、データベース接続の取得と解放を管理および最適化できます。コード:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.8</version> </dependency>依存関係が属する組織を
com.oceanbase、名前をoceanbase-client、バージョン番号を2.4.3と指定します。この依存関係を使用することで、OceanBaseが提供するクライアント機能(接続、クエリ、トランザクションなど)を利用できます。コード:
<dependencies> <dependency> <groupId>com.oceanbase</groupId> <artifactId>oceanbase-client</artifactId> <version>2.4.3</version> </dependency> </dependencies>
config.propertiesファイルの解説
config.properties ファイルは、OceanBaseデータベースへのデータベース接続情報を設定します。データベースドライバーのクラス名、接続URL、ユーザー名、パスワード、接続プールの関連設定を含みます。これらの構成パラメータは、アプリケーション内でデータベース接続を取得および管理し、データベース操作を実行するために使用されます。
db.app.driverを使用して、データベースドライバープログラムをcom.oceanbase.jdbc.Driverと指定します。OceanBaseデータベースとの接続を確立するために使用されます。db.app.urlを使用して、データベース接続用のURLを指定します。db.app.userを使用して、データベース接続用のユーザー名を指定します。db.app.passwordを使用して、データベース接続用のパスワードを指定します。db.app.poolInitialSizeを使用して、データベース接続プールの初期サイズを3に設定します。最初に3つのデータベース接続が作成されます。db.app.poolMaxSizeを使用して、データベース接続プールの最大数を10に設定します。接続プール内で最大10個のデータベース接続を作成できます。db.app.connectionTimeoutMillisを使用して、データベース接続のタイムアウト時間を100 msに設定します。データベース接続を取得する際、100 msを超えても接続を取得できない場合、タイムアウト例外がスローされます。db.app.validationQueryを使用して、データベース接続の有効性を検証するために使用するSQLクエリをselect 1 from dualと指定します。接続プールから接続を取得する際に、このクエリを実行して接続の有効性が検証されます。コード:
db.app.driver=com.oceanbase.jdbc.Driver db.app.url=jdbc:oceanbase://host:port/schema_name db.app.user=user_name db.app.password=****** db.app.poolInitialSize=3 db.app.poolMaxSize=10 db.app.connectionTimeoutMillis=100 db.app.validationQuery=select 1 from dual
web.xmlコードの紹介
web.xml ファイルは、Webアプリケーションのフィルターを設定するために使用されます。
web.xml 設定ファイルの内容は以下のとおりです:
ファイル宣言ステートメントです。
このファイルがXMLファイルであり、使用しているXMLのバージョンが
1.0で、文字エンコーディング方式がUTF-8であることを宣言しています。コード:
<?xml version="1.0" encoding="UTF-8"?>XMLのネームスペースとXMLモデルバージョンを設定します。
xmlns:xsiを使用して、XMLネームスペースをhttp://www.w3.org/2001/XMLSchema-instanceと指定します。xmlnsを使用して、XMLのネームスペースをhttp://java.sun.com/xml/ns/javaeeと指定します。xsi:schemaLocationを使用して、XMLネームスペースをhttp://java.sun.com/xml/ns/javaee、XMLのXSDファイルの場所をhttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsdと指定します。<id>および<version>要素を使用して、WebアプリケーションのIDをWebApp_IDと指定し、バージョン番号を3.0と指定します。
コード:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">JFinalフィルターを設定します。
Webアプリケーション内でJFinalフレームワークを使用するため、
jfinalという名前のフィルターを設定します。フィルタークラスをcom.jfinal.core.JFinalFilterと指定します。初期化パラメータconfigClassを指定することにより、JFinalフレームワークの設定クラスの位置をcom.oceanbase.testjfinal.config.UserConfigと指定します。このフィルターは、Webアプリケーション内で JFinalフレームワークを使用するためのもので、指定された設定クラスに基づいて JFinalフレームワークの動作が設定されます。コード:
<filter> <filter-name>jfinal</filter-name> <filter-class>com.jfinal.core.JFinalFilter</filter-class> <init-param> <param-name>configClass</param-name> <!-- your jfinal configuration location --> <param-value>com.oceanbase.testjfinal.config.UserConfig</param-value> </init-param> </filter>JFinalフィルターのマッピングを設定します。
jfinalフィルターはすべてのリクエストパスに適用され、このフィルターはアプリケーション内のすべてのリクエストに適用されます。コード:
<filter-mapping> <filter-name>jfinal</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
UserConfig.javaファイルの紹介
UserConfig.java ファイルは、アプリケーションのルーティング、プラグイン、データベース接続などの関連情報の設定に使用されます。
UserConfig.java ファイルのコードは、主に以下の部分が含まれます:
他のクラスとインターフェースをインポートします。
現在のファイルに以下のインターフェースとクラスが含まれていることを宣言します:
StatFilterクラス:データベースアクセスのパフォーマンスを統計します。JdbcConstantsクラス:データベースのタイプの定数を定義します。WallFilterクラス:SQLインジェクション攻撃を防ぎますPropKitクラス:設定ファイルを読み取ります。ActiveRecordPluginクラス:データベースを操作します。Dbクラス:データベースの操作を実行します。OracleDialectクラス:データベースの方言を指定します。DruidPluginクラス:データベースに接続するために使用されます。Engineクラス:テンプレートエンジンを設定します。UserControllerクラス:ユーザー関連のリクエストを処理します。Userクラス:ユーザーデータの転送とストレージに使用されます。
コード:
import com.alibaba.druid.filter.stat.StatFilter; import com.alibaba.druid.util.JdbcConstants; import com.alibaba.druid.wall.WallFilter; import com.jfinal.config.*; import com.jfinal.kit.PropKit; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.dialect.OracleDialect; import com.jfinal.plugin.druid.DruidPlugin; import com.jfinal.template.Engine; import com.oceanbase.testjfinal.controller.UserController; import com.oceanbase.testjfinal.pojo.User;UserConfigクラスを定義します。JFinalConfigクラスの各メソッドをオーバーライドすることで、定数、ルーティング、プラグイン、データベース接続などの情報を設定できます。configConstantメソッドを定義します。JFinalフレームワークの設定に使用される定数で、
PropKitを使用して設定ファイルから設定を読み取ります。コード:
@Override public void configConstant(Constants constants) { PropKit.use("config.properties"); }configRouteメソッドを定義します。ルーティングマッピングを設定するために、
routes.addメソッドを使用して、"/hello"パスをUserControllerクラスのデフォルトアクセスページにマッピングします。コード:
@Override public void configRoute(Routes routes) { routes.add("/hello", UserController.class, "/"); }configEngineメソッドを定義します。テンプレートエンジンを設定するために使用されます。
コード:
@Override public void configEngine(Engine engine) { }configPluginメソッドを定義します。アプリケーションのプラグインを設定します。
initメソッドを呼び出してデータベース接続とテーブル構造を初期化し、DruidPluginとActiveRecordPluginプラグインを作成して、pluginsに追加します。同時に、activeRecordPluginのaddMappingメソッドを呼び出して、データベーステーブルとエンティティクラスのマッピング関係を追加し、TEST_USERテーブルをUserクラスにマッピングします。コード:
@Override public void configPlugin(Plugins plugins) { init(); DruidPlugin druidPlugin = createDruidPlugin(); plugins.add(druidPlugin); ActiveRecordPlugin activeRecordPlugin = createActiveRecordPlugin(druidPlugin); activeRecordPlugin.addMapping("TEST_USER", User.class); plugins.add(activeRecordPlugin); }createDruidPluginメソッドを定義します。DruidPluginプラグインの作成と関連パラメータの設定に使用されます。接続プールサイズ、SQLファイアウォール、接続エラー処理などが含まれます。PropKitのgetメソッドを呼び出して、URL、ユーザー名、パスワード、ドライバークラスなど、設定ファイル内のデータベース接続関連のプロパティ値を取得します。次にDruidPluginオブジェクトを作成し、取得したプロパティ値を用いて初期化します。addFilterメソッドを呼び出して、DruidPluginにStatFilterインスタンスを追加します。これは、データベースアクセスのパフォーマンスを統計するために使用されます。WallFilterインスタンスを作成し、setDbTypeメソッドでデータベースタイプをOceanBaseに設定して、DruidPluginに追加してSQLファイアウォールフィルタリングを実行します。setInitialSizeメソッドを呼び出して接続プールの初期サイズを設定します。setMaxPoolPreparedStatementPerConnectionSizeメソッドで各接続プールのプリペアドステートメントの最大数を設定します。setTimeBetweenConnectErrorMillisメソッドで2回の接続エラー間の時間間隔を設定します。setValidationQueryメソッドで接続の検証クエリステートメントを設定します。最後に、作成されたDruidPluginインスタンスを返します。コード:
private DruidPlugin createDruidPlugin() { DruidPlugin druidPlugin = new DruidPlugin( PropKit.get("db.app.url"), PropKit.get("db.app.user"), PropKit.get("db.app.password"), PropKit.get("db.app.driver") ); druidPlugin.addFilter(new StatFilter()); WallFilter wallFilter = new WallFilter(); wallFilter.setDbType(JdbcConstants.OCEANBASE); druidPlugin.addFilter(wallFilter); druidPlugin.setInitialSize(PropKit.getInt("db.app.poolInitialSize")); druidPlugin.setMaxPoolPreparedStatementPerConnectionSize(PropKit.getInt("db.app.poolMaxSize")); druidPlugin.setTimeBetweenConnectErrorMillis(PropKit.getInt("db.app.connectionTimeoutMillis")); druidPlugin.setValidationQuery("select 1 from dual"); return druidPlugin; }
initメソッドを定義します。データベース接続の初期化とデータベーステーブルの作成に使用されます。
initDbConnectionメソッドを呼び出してデータベース接続を初期化し、ActiveRecordPluginインスタンスを返します。次に、SQLステートメントを実行して、ユーザーテーブルTEST_USERが存在するかどうかを確認します。ユーザーテーブルが存在しない場合、CREATE TABLEステートメントを実行してTEST_USERという名前のデータベーステーブルを作成します。このテーブルにはIDとNAMEの2つのフィールドが含まれます。最後にActiveRecordPluginプラグインの接続をクローズし、データベース接続を解放します。コード:
public void init() { ActiveRecordPlugin arp = initDbConnection(); boolean tableExists = Db.queryInt("SELECT COUNT(*) FROM USER_TABLES WHERE TABLE_NAME = 'TEST_USER'") > 0; if (!tableExists) { String sql = "CREATE TABLE TEST_USER (ID NUMBER(10), NAME VARCHAR2(50))"; Db.update(sql); } arp.stop(); }initDbConnectionメソッドを定義します。データベースへの接続を初期化するために使用されます。まず、
createDruidPluginメソッドを呼び出してDruidPluginオブジェクトを作成し、変数druidPluginに割り当てます。このメソッドは、DruidPluginの作成と設定を担当し、データベース接続プールの管理に使用されます。次に、createActiveRecordPluginメソッドを呼び出してActiveRecordPluginオブジェクトを作成し、DruidPluginオブジェクトをパラメータとしてこのメソッドに転送します。このメソッドは、ActiveRecordPluginの作成と設定を担当し、データベース操作の管理に使用されます。その後、druidPlugin.startメソッドを呼び出して、DruidPluginを起動し、データベース接続プールを初期化します。最後にactiveRecordPlugin.startメソッドを呼び出してActiveRecordPluginを起動します。このメソッドは、設定に基づいてデータベース操作に関する設定を初期化します。コード:
private ActiveRecordPlugin initDbConnection() { DruidPlugin druidPlugin = createDruidPlugin(); ActiveRecordPlugin activeRecordPlugin = createActiveRecordPlugin(druidPlugin); druidPlugin.start(); activeRecordPlugin.start(); return activeRecordPlugin; }ConfigInterceptorおよびConfigHandlerメソッドを定義します。システム初期化時にグローバル設定を行うために使用されます。
コード:
@Override public void configInterceptor(Interceptors interceptors) { } @Override public void configHandler(Handlers handlers) { }
UserController.javaファイルの紹介
UserController.java ファイルは、getData メソッドを使用してデータをデータベースに挿入し、データクエリを実行し、クエリ結果をJSON形式でクライアントに返します。JFinalフレームワークが提供する Db クラスを用いてデータベース操作を実行し、カスタムの User クラスを用いてデータマッピングを行うことで、データベース操作とデータ返却機能を実現します。
UserController.java ファイルのコードは主に以下の部分が含まれます:
他のクラスとインターフェースをインポートします。
現在のファイルに以下のインターフェースとクラスが含まれていることを宣言します:
Controllerクラス:リクエストとレスポンスを処理します。Dbクラス:データベースの操作を実行します。Userクラス:データベーステーブルにマッピングします。Listインターフェース:クエリ結果セットを操作します。
コード:
import com.jfinal.core.Controller; import com.jfinal.plugin.activerecord.Db; import com.oceanbase.testjfinal.pojo.User; import java.util.List;UserControllerクラスを定義します。JFinalフレームワークにコントローラーを提供し、
getDataメソッドを使用してデータベースへのデータ挿入とデータ検索操作を実行します。- データを挿入します。
Db.updateメソッドを使用してSQL挿入ステートメントを実行し、TEST_USERという名前のテーブルに2つのデータを挿入します。ID は1と2、名前はそれぞれJohnとJaneです。 - データをクエリします。
User.dao.findメソッドを使用してSQLクエリステートメントを実行し、TEST_USERテーブルに対してすべてのデータのクエリを実行します。クエリ結果はListタイプの変数usersに代入されます。 - JSONデータをレンダリングします。
renderJsonメソッドを使用して、usersオブジェクトに格納されたデータをJSON形式でレンダリングし、クライアントに返します。 - 例外処理を行います。操作の実行中に例外をキャッチした場合、
catchステートメントブロックで例外のスタック情報を出力します。
コード:
public class UserController extends Controller { public void getData(){ try { // データの挿入 String insertDataSql = "INSERT INTO TEST_USER (ID, NAME) VALUES (?, ?)"; Db.update(insertDataSql, 1, "John"); Db.update(insertDataSql, 2, "Jane"); //データのクエリ List<User> users; users = User.dao.find("SELECT * FROM TEST_USER"); renderJson(users); }catch (Exception e){ e.printStackTrace(); } } }- データを挿入します。
User.javaファイルの紹介
User.java ファイルは、データベーステーブルとJavaオブジェクトのマッピングを実現するために使用されます。
User.java ファイルのコードには、主に以下の部分が含まれます:
Modelクラスをインポートします。Modelクラスはデータベーステーブルのマッピングとデータの操作に使用されます。Userクラスを定義します。Userクラスは、継承したModelクラスが提供するメソッドを使用してデータベース操作を行います。コード:
import com.jfinal.plugin.activerecord.Model; public class User extends Model<User> { public static final User dao = new User(); }
全コード表示
<?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-jfinal</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- Packaging method (default to jar) -->
<packaging>war</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>5.0.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>com.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId>
<version>2.4.3</version>
</dependency>
</dependencies>
</project>
db.app.driver=com.oceanbase.jdbc.Driver
db.app.url=jdbc:oceanbase://host:port/schema_name
db.app.user=user_name
db.app.password=
db.app.poolInitialSize=3
db.app.poolMaxSize=10
db.app.connectionTimeoutMillis=100
db.app.validationQuery=select 1 from dual
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<!-- your jfinal configuration location -->
<param-value>com.oceanbase.testjfinal.config.UserConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
package com.oceanbase.testjfinal.config;
import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.util.JdbcConstants;
import com.alibaba.druid.wall.WallFilter;
import com.jfinal.config.*;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.dialect.OracleDialect;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.template.Engine;
import com.oceanbase.testjfinal.controller.UserController;
import com.oceanbase.testjfinal.pojo.User;
public class UserConfig extends JFinalConfig {
@Override
public void configConstant(Constants constants) {
// Read properties configuration
PropKit.use("config.properties");
}
@Override
public void configRoute(Routes routes) {
// Set the default access page for project startup, which does not need to be set in the web.
routes.add("/hello", UserController.class, "/");
}
@Override
public void configEngine(Engine engine) {
}
@Override
public void configPlugin(Plugins plugins) {
init();
DruidPlugin druidPlugin = createDruidPlugin();
plugins.add(druidPlugin);
ActiveRecordPlugin activeRecordPlugin = createActiveRecordPlugin(druidPlugin);
activeRecordPlugin.addMapping("TEST_USER", User.class);
plugins.add(activeRecordPlugin);
}
private DruidPlugin createDruidPlugin() {
DruidPlugin druidPlugin = new DruidPlugin(
PropKit.get("db.app.url"),
PropKit.get("db.app.user"),
PropKit.get("db.app.password"),
PropKit.get("db.app.driver")
);
druidPlugin.addFilter(new StatFilter());
WallFilter wallFilter = new WallFilter();
wallFilter.setDbType(JdbcConstants.OCEANBASE);
druidPlugin.addFilter(wallFilter);
druidPlugin.setInitialSize(PropKit.getInt("db.app.poolInitialSize"));
druidPlugin.setMaxPoolPreparedStatementPerConnectionSize(PropKit.getInt("db.app.poolMaxSize"));
druidPlugin.setTimeBetweenConnectErrorMillis(PropKit.getInt("db.app.connectionTimeoutMillis"));
druidPlugin.setValidationQuery("select 1 from dual");
return druidPlugin;
}
private ActiveRecordPlugin createActiveRecordPlugin(DruidPlugin druidPlugin) {
ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(druidPlugin);
activeRecordPlugin.setDialect(new OracleDialect());
return activeRecordPlugin;
}
public void init() {
ActiveRecordPlugin arp = initDbConnection();
boolean tableExists = Db.queryInt("SELECT COUNT(*) FROM USER_TABLES WHERE TABLE_NAME = 'TEST_USER'") > 0;
if (!tableExists) {
String sql = "CREATE TABLE TEST_USER (ID NUMBER(10), NAME VARCHAR2(50))";
Db.update(sql);
}
arp.stop();
}
private ActiveRecordPlugin initDbConnection() {
DruidPlugin druidPlugin = createDruidPlugin();
ActiveRecordPlugin activeRecordPlugin = createActiveRecordPlugin(druidPlugin);
druidPlugin.start();
activeRecordPlugin.start();
return activeRecordPlugin;
}
@Override
public void configInterceptor(Interceptors interceptors) {
}
@Override
public void configHandler(Handlers handlers) {
}
}
package com.oceanbase.testjfinal.controller;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Db;
import com.oceanbase.testjfinal.pojo.User;
import java.util.List;
public class UserController extends Controller {
public void getData(){
try {
// データの挿入
String insertDataSql = "INSERT INTO TEST_USER (ID, NAME) VALUES (?, ?)";
Db.update(insertDataSql, 1, "John");
Db.update(insertDataSql, 2, "Jane");
//データのクエリ
List<User> users;
users = User.dao.find("SELECT * FROM TEST_USER");
renderJson(users);
}catch (Exception e){
e.printStackTrace();
}
}
}
package com.oceanbase.testjfinal.pojo;
import com.jfinal.plugin.activerecord.Model;
public class User extends Model<User> {
public static final User dao = new User();
}
関連ドキュメント
その他のOceanBase Connector/Jに関する情報は、OceanBase JDBCドライバーを参照してください。
クリックしてjava-oceanbase-Jfinalサンプルプロジェクトをダウンロード