0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

mybatisのOGNLをローカルで動かしたい!

Posted at

myBatisを使ってマッパーファイルを作成していると、OGNLで条件式を記載しなければならないが記載に癖があってサクッと作成した条件式が期待通り動作するかを確認したい時がある。
なので、以下にローカル環境でOGNL条件式を使用したプログラムを記載する。

準備

gradleプロジェクトを作成

$ mkdir testOgnl #任意のディレクトリ名
$ cd testOgnl
$ gradle init #gradleプロジェクト作成
gradleプロジェク作成内容

Select type of build to generate:
  1: Application
  2: Library
  3: Gradle plugin
  4: Basic (build structure only)
Enter selection (default: Application) [1..4]  1を選択

Select implementation language:
  1: Java
  2: Kotlin
  3: Groovy
  4: Scala
  5: C++
  6: Swift
Enter selection (default: Java) [1..6] 1を選択

Select application structure:
  1: Single application project
  2: Application and library project
Enter selection (default: Single application project) [1..2] 1を選択

Select build script DSL:
  1: Kotlin
  2: Groovy
Enter selection (default: Kotlin) [1..2] 2を選択

その他はデフォルトでOK

以下を追加

build.gradle
dependencies {
    implementation 'ognl:ognl:3.3.4'
    testImplementation 'org.junit.jupiter:junit-jupiter:5.9.1'
    //他はデフォルトでOK
}

テスト用のプログラムを作成

OgnlTester.java
package org.example;

// OGNLライブラリのクラスをインポート
import ognl.Ognl;
import ognl.OgnlContext;

import java.util.HashMap;
import java.util.Map;
import java.math.BigDecimal;

/**
 * OGNL式を使って条件評価を行うサンプルクラスです。
 * Mapに格納したパラメータを使って、OGNL式の評価結果を取得し表示します。
 */
public class OgnlTester {
    public static void main(String[] args) throws Exception {
        // 評価対象のパラメータを格納するMapを作成
        Map<String, Object> params = new HashMap<>();
        // valueにbicdecimalを設定する場合は、BigDecimalをインポートして使用
        params.put("value", new BigDecimal("1L")); // 例: BigDecimal値
        params.put("price", Long.valueOf(1)); // 例: Long値
        params.put("version", new String("1")); // バージョン
        params.put("status", "ACTIVE"); // ステータス(文字列)
        params.put("name", null); // 名前(null)

        // 評価対象のOGNL式を文字列として定義
        String expression = "version.equals(\"1\") ";
        String expression2 = "price == 1L ";

        // OGNL評価用のコンテキストを生成(ルートオブジェクトなし)
        OgnlContext context = (OgnlContext) Ognl.createDefaultContext(null);

        // 式を構文解析(Expression Treeを生成)
        Object tree = Ognl.parseExpression(expression);
        Object tree2 = Ognl.parseExpression(expression2);

        // OGNL式を評価して結果を取得(paramsの値を使って式を評価)
        Object result = Ognl.getValue(tree, context, params);
        Object result2 = Ognl.getValue(tree2, context, params);

        // 評価結果を出力
        System.out.println("評価結果: " + result);
        System.out.println("評価結果2: " + result2);
    }
}

gradleコマンドで実行

$ ./gradlew build
$ ./gradlew run
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?