OceanBase logo

OceanBase

トランザクション処理、分析、AIワークロードに最適な分散データベース

デプロイを自由に

OceanBase Cloud

OceanBaseの導入とスケーリングを最適化

エンタープライズ版

自社インフラ上での運用・管理に対応

オープンソース版を試す

コミュニティ版

開発者向けオープンソース分散データベース

OceanBase seekdb

AIネイティブなオープンソースの検索データベース

顧客事例

さまざまな業界の企業による導入事例を紹介します。

さらに見る
利用シーン別

あらゆるシナリオに対応するOLTP

ハイブリッドクラウドソリューション

大容量ストレージデータベースのコスト削減

リアルタイム分析混合ワークロード

複数インスタンスの統合

ドキュメント

会社概要

OceanBaseの企業情報、パートナーシップ、そして信頼性・セキュリティへの取り組みについて紹介します。

OceanBaseについて

法的情報

お問い合わせ

日本 - 日本語
International - English
中国站 - 简体中文
クラウドで始める

トランザクション処理、分析、AIワークロードに最適な分散データベース

デプロイを自由に

OceanBase Cloud

OceanBaseの導入とスケーリングを最適化

エンタープライズ版

自社インフラ上での運用・管理に対応

オープンソース版を試す

コミュニティ版

開発者向けオープンソース分散データベース

OceanBase seekdb

AIネイティブなオープンソースの検索データベース

顧客事例

さまざまな業界の企業による導入事例を紹介します。

さらに見る
利用シーン別

あらゆるシナリオに対応するOLTP

ハイブリッドクラウドソリューション

大容量ストレージデータベースのコスト削減

リアルタイム分析混合ワークロード

複数インスタンスの統合

OceanBaseの企業情報、パートナーシップ、そして信頼性・セキュリティへの取り組みについて紹介します。

OceanBaseについて

法的情報

お問い合わせ

クラウドで始める
编组
すべての製品
    • データベース
    • アイコンOceanBaseデータベース
アイコン

OceanBaseデータベース

V4.3.5

    OceanBase logo

    AI時代を支える分散データベース

    日本 - 日本語
    International - English
    中国站 - 简体中文
    プロダクト
    OceanBase Cloudエンタープライズ版コミュニティ版OceanBase seekdb
    会社概要
    OceanBaseについて法的情報お問い合わせ
    公式アカウント
    ConnpassXQiitaLumaGitHub

    © OceanBase 2026. All rights reserved

    クラウドサービス契約個人情報保護ポリシーセキュリティ
    お問い合わせ
    ドキュメントフィードバック
    1. ホーム
    2. OceanBaseデータベース
    3. V4.3.5
    アイコンOceanBaseデータベース
    V 4.3.5
    • V 4.3.5

    MyBatis

    最終更新日:2026-04-09 02:53:56  更新
    シェア
    このページの内容
    前提条件
    操作手順
    ステップ1:OceanBaseデータベースの接続文字列を取得する
    ステップ2:java-oceanbase-mybatis プロジェクトをIDEAにインポートする
    ステップ3:java-oceanbase-mybatis プロジェクトのデータベース接続情報を修正する
    ステップ4:java-oceanbase-mybatis プロジェクトを実行する
    プロジェクトコードについて
    pom.xmlのコード紹介
    jdbc.propertiesのコード紹介
    mybatis-config.xmlの紹介
    IUserMapper.xmlのコード紹介
    IAppMapper.javaのコード紹介
    IUserMapper.javaのコード紹介
    App.javaのコード紹介
    User.javaのコード紹介
    MyBatisTest.javaファイルの紹介
    全コード表示
    関連ドキュメント

    折りたたみ

    シェア

    本記事では、MyBatisフレームワークとOceanBaseデータベースを使用して、テーブルの作成、データの挿入、クエリなどの基本的な操作を実現するアプリケーションの構築方法を紹介します。

    クリックしてjava-oceanbase-mybatisサンプルプロジェクトをダウンロード

    前提条件

    • OceanBaseデータベースがインストール済みであること。
    • JDK 1.8とMavenがインストール済みであること。
    • IntelliJ IDEAがインストール済みであること。

    説明

    この記事でコードを実行するために使用したツールは、IntelliJ IDEA 2021.3.2(Community Edition)バージョンです。ご自身の好みに合わせて、適切なツールを選択してサンプルコードを実行することも可能です。

    操作手順

    説明

    本記事で示されている操作手順は、Windows環境に基づいています。他のOS環境やコンパイラを使用している場合は、操作手順が若干異なる場合があります。

    1. OceanBaseデータベースの接続文字列を取得します。
    2. java-oceanbase-mybatis プロジェクトをIDEAにインポートします。
    3. java-oceanbase-mybatis プロジェクトのデータベース接続情報を修正します。
    4. java-oceanbase-mybatis プロジェクトを実行します。

    ステップ1:OceanBaseデータベースの接続文字列を取得する

    1. OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。

      obclient -hxx.xx.xx.xx -P2883 -uroot@sys#cluster -p**** -A
      
    2. デプロイ済みのOceanBaseデータベースに基づいて、以下のURLの対応する情報を入力します。

      説明

      jdbc.properties ファイルには、このURL情報が必要です。

      jdbc:oceanbase://host:port/schema_name?user=$user_name&password=$password&useServerPrepStmts=true&rewriteBatchedStatements=true
      

      パラメータの説明:

      • host:OceanBaseデータベースへの接続IPアドレス。ODP接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。

      • port:OceanBaseデータベースへの接続ポート。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。

      • schema_name:アクセスするスキーマ名です。

      • user_name:テナントの接続アカウント。ODP接続方式の一般的な形式は2種類あります:ユーザー名@テナント名#クラスタ名 または クラスタ名:テナント名:ユーザー名。直接接続方式の形式:ユーザー名@テナント名。

      • password:アカウントのパスワード。

      • useServerPrepStmts=true&rewriteBatchedStatements=true:追加の接続プロパティです。

        • rewriteBatchedStatements:挿入クリエに対しては、batchedStatement をリライトして単一の executeQuery で実行します。rewriteBatchedStatements がアクティブな状態のとき、useServerPrepStmts オプションは false に設定されています。 デフォルト値:false。
        • useServerPrepStmts:実行する前に、サーバー側で PrepareStatement を準備します。アプリケーションが同じSQLステートメントを繰り返し実行する必要がある場合、このパラメータを有効にすることで、データベース内で同じSQLの再コンパイルおよび解析の回数を減らすことができます。

    詳細なURLパラメータの説明については、データベースURLを参照してください。

    ステップ2:java-oceanbase-mybatis プロジェクトをIDEAにインポートする

    1. IntelliJ IDEA を開き、File > Open... オプションを選択します。

      file

    2. 表示された Open File or Project ウィンドウで、対応するプロジェクトファイルを選択し、OK をクリックしてプロジェクトファイルのインポートを完了します。

    3. IntelliJ IDEAは、プロジェクト内のさまざまなファイルの種類を自動的に認識し、Project ツールウィンドウで、プロジェクトのディレクトリ構造、ファイルリスト、モジュールリスト、依存関係などの情報を確認できます。Project ツールウィンドウは通常、IntelliJ IDEA画面の左側にあり、デフォルトでは開いています。Project ツールウィンドウが閉じている場合は、メニューバーの View > Tool Windows > Project をクリックするか、ショートカットキー Alt + 1 を使用して再表示できます。

      説明

      IntelliJ IDEAでプロジェクトをインポートすると、IntelliJ IDEAはプロジェクト内のpom.xmlファイルを自動的に検出し、ファイルに記述されている依存関係に基づいて必要な依存ライブラリを自動的にダウンロードし、プロジェクトに追加します。

    4. プロジェクトの状況を確認します。

    testmybatis

    ステップ3:java-oceanbase-mybatis プロジェクトのデータベース接続情報を修正する

    ステップ1:OceanBaseデータベースの接続文字列を取得する に記載されている情報に基づいて、jdbc.properties ファイル内のデータベース接続情報を修正します。

    例:

    • データベースドライバーの名前:com.oceanbase.jdbc.Driver
    • OBServerノードのIPアドレスは 10.10.10.1 です。
    • アクセスポートは2881を使用します。
    • アクセスするスキーマ名は sys です。
    • URLに追加の接続プロパティとして useServerPrepStmts=true&rewriteBatchedStatements=true を設定します。
    • テナントの接続アカウントは sys@xyoracle です。xyoracle はOceanBaseデータベース内に作成されたOracleモードのユーザーテナントであり、sys はテナント xyoracle のユーザー名です。
    • パスワードは ****** です。

    サンプルコードは以下のとおりです:

    jdbc.driver=com.oceanbase.jdbc.Driver
    jdbc.url=jdbc:oceanbase://10.10.10.1:2881/sys?useServerPrepStmts=true&rewriteBatchedStatements=true
    jdbc.username=sys@xyoracle
    jdbc.password=******
    

    ステップ4:java-oceanbase-mybatis プロジェクトを実行する

    実行パス

    1. プロジェクト構造の src > test > java フォルダから TestMybatis.java ファイルを見つけます。
    2. ツールメニューバーで 実行(U) > 実行 > TestMybatis を選択するか、右上の緑色の三角形をクリックして実行します。
    3. IDEAのコンソールを使用して、プロジェクトのログ情報と出力結果を確認します。

    実行結果

    1. testUserMapper メソッドを実行した出力結果は以下のとおりです:

      User{id=2, name='update'}
      User{id=3, name='insert'}
      User{id=4, name='insert'}
      User{id=5, name='insert'}
      User{id=6, name='insert'}
      User{id=7, name='insert'}
      User{id=8, name='insert'}
      User{id=9, name='insert'}
      User{id=10, name='insert'}
      usersByPage = [User{id=5, name='insert'}, User{id=6, name='insert'}, User{id=7, name='insert'}]
      
    2. testSqlSession メソッドを実行した出力結果は次のとおりです:

      User{id=2, name='update'}
      User{id=3, name='insert'}
      User{id=4, name='insert'}
      User{id=5, name='insert'}
      User{id=6, name='insert'}
      User{id=7, name='insert'}
      User{id=8, name='insert'}
      User{id=9, name='insert'}
      User{id=10, name='insert'}
      
    3. testAppMapper メソッドを実行した出力結果は以下のとおりです:

      App{id=2, name='update'}
      App{id=3, name='insert3'}
      App{id=4, name='insert4'}
      App{id=5, name='insert5'}
      App{id=6, name='insert6'}
      App{id=7, name='insert7'}
      App{id=8, name='insert8'}
      App{id=9, name='insert9'}
      App{id=10, name='insert10'}
      pageList = Page{count=true, pageNum=2, pageSize=3, startRow=3, endRow=6, total=9, pages=3, reasonable=false, pageSizeZero=true}[App{id=5, name='insert5'}, App{id=6, name='insert6'}, App{id=7, name='insert7'}]
      
    4. 完全な出力結果は次のとおりです:

      User{id=2, name='update'}
      User{id=3, name='insert'}
      User{id=4, name='insert'}
      User{id=5, name='insert'}
      User{id=6, name='insert'}
      User{id=7, name='insert'}
      User{id=8, name='insert'}
      User{id=9, name='insert'}
      User{id=10, name='insert'}
      usersByPage = [User{id=5, name='insert'}, User{id=6, name='insert'}, User{id=7, name='insert'}]
      App{id=2, name='update'}
      App{id=3, name='insert3'}
      App{id=4, name='insert4'}
      App{id=5, name='insert5'}
      App{id=6, name='insert6'}
      App{id=7, name='insert7'}
      App{id=8, name='insert8'}
      App{id=9, name='insert9'}
      App{id=10, name='insert10'}
      pageList = Page{count=true, pageNum=2, pageSize=3, startRow=3, endRow=6, total=9, pages=3, reasonable=false, pageSizeZero=true}[App{id=5, name='insert5'}, App{id=6, name='insert6'}, App{id=7, name='insert7'}]
      User{id=2, name='update'}
      User{id=3, name='insert'}
      User{id=4, name='insert'}
      User{id=5, name='insert'}
      User{id=6, name='insert'}
      User{id=7, name='insert'}
      User{id=8, name='insert'}
      User{id=9, name='insert'}
      User{id=10, name='insert'}
      

    プロジェクトコードについて

    java-oceanbase-mybatis をクリックしてプロジェクトコードをダウンロードします。これは、java-oceanbase-mybatis という圧縮ファイルです。

    解凍すると、java-oceanbase-mybatis という名前のフォルダが作成されます。ディレクトリ構造は以下のとおりです:

    │--pom.xml
    │
    ├─.idea
    │
    ├─src
    │  ├─main
    │  │  ├─java
    │  │  │  └─com
    │  │  │      └─oceanbase
    │  │  │          ├─mapper
    │  │  │          │------IAppMapper.java
    │  │  │          │------IUserMapper.java
    │  │  │          │
    │  │  │          └─pojo
    │  │  │              │---App.java
    │  │  │              └─--User.java
    │  │  │
    │  │  └─resources
    │  │      │--jdbc.properties
    │  │      │--mybatis-config.xml
    │  │      │
    │  │      └─com
    │  │          └─oceanbase
    │  │              └─mapper
    │  │                  └─---IUserMapper.xml
    │  │
    │  └─test
    │      └─java
    │          └─---TestMybatis.java
    │
    └─target
    

    ファイルの説明:

    • pom.xml:Mavenプロジェクトの設定ファイルは、プロジェクトの依存関係、プラグイン、ビルドなどの情報が含まれます。
    • .idea:IDE(統合開発環境)で使用されるディレクトリで、プロジェクト関連の設定情報を格納するために使用されます。
    • src:通常、プロジェクトのソースコードを格納するディレクトリを表すために使用されます。
    • main: 主要なソースコードとリソースファイルを格納するディレクトリ。
    • java: Javaソースコードを格納するディレクトリ。
    • com: Javaパッケージを格納するルートディレクトリ。
    • oceanbase: プロジェクトを格納するルートディレクトリです。
    • mapper: MyBatisのMapperインターフェースとXMLファイルを格納します。
    • IAppMapper.java:アプリケーションデータアクセス層のインターフェースを保存します。
    • IUserMapper.java:ユーザーデータアクセス層のインターフェースを保存します。
    • pojo: JavaBeanまたはエンティティクラスを格納します。
    • App.java:アプリケーションエンティティクラスを格納します。
    • User.java:ユーザーエンティティクラスを格納します。
    • resources: リソースファイルを格納するディレクトリで、設定ファイル、SQLファイルなどが含まれます。
    • jdbc.properties: データベース接続情報の設定ファイルを格納します。
    • mybatis-config.xml: MyBatisの設定を格納したファイルです。
    • IUserMapper.xml:ユーザーデータアクセス層のXML設定ファイルです。
    • test: テストコードとリソースファイルを格納するディレクトリです。
    • TestMybatis.java: MyBatisのテスト用Javaクラスを格納します。
    • target: コンパイル済みのClassファイル、Jarパッケージなどのファイルを格納するディレクトリ。

    pom.xmlのコード紹介

    説明

    例を確認するだけの場合、デフォルトコードを使用してください。修正する必要はありません。以下の説明に従って、必要に応じて pom.xml ファイルを変更することもできます。

    pom.xml 設定ファイルの内容は以下のとおりです:

    1. ファイル宣言ステートメントです。

      このファイルがXMLファイルであり、使用しているXMLのバージョンが 1.0 で、文字エンコーディング方式が UTF-8 であることを宣言しています。

      コード:

      <?xml version="1.0" encoding="UTF-8"?>
      
    2. POMのネームスペースとPOMモデルのバージョンを設定します。

      1. xmlns を使用して、POMのネームスペースを http://maven.apache.org/POM/4.0.0 と指定します。
      2. xmlns:xsi を使用して、XMLネームスペースを http://www.w3.org/2001/XMLSchema-instance と指定します。
      3. xsi:schemaLocation を使用して、POMのネームスペースを http://maven.apache.org/POM/4.0.0 と指定し、POMのXSDファイルの場所を http://maven.apache.org/xsd/maven-4.0.0.xsd と指定します。
      4. <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>
      
    3. 基本情報を設定します。

      1. <groupId> を使用して、プロジェクト識別子を com.oceanbase.example と指定します。
      2. <artifactId> を使用して、プロジェクトの依存関係を java-oceanbase-mybatis と指定します。
      3. <version> を使用して、プロジェクトのバージョン番号を 1.0-SNAPSHOT と指定します。

      コード:

      <groupId>com.oceanbase.example</groupId>
      <artifactId>java-oceanbase-mybatis</artifactId>
      <version>1.0-SNAPSHOT</version>
      
    4. <build> タグを使用して、プロジェクトのビルドプロセスを定義します。

      1. <plugins> を使用して、プロジェクトで設定するプラグインを指定します。
      2. <plugin> を使用して、プロジェクトでプラグインを1つ設定します。
      3. <groupId> を使用して、プロジェクトの識別子を org.apache.maven.plugins と指定します。
      4. <artifactId> を使用して、プロジェクトの依存関係を maven-compiler-plugin と指定します。
      5. <configuration> を使用して、設定するプラグインのパラメータを指定します。
      6. <source> を使用して、コンパイラのソースコードバージョンを8と指定します。
      7. <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>
      
    5. <dependencies> を使用して、プロジェクトが依存するコンポーネントを定義します。

      1. 依存関係が所属する組織を com.oceanbase、名前を oceanbase-client、バージョン番号を 2.4.2 と指定します。

        コード:

            <dependencies>
            <dependency>
                <groupId>com.oceanbase</groupId>
                <artifactId>oceanbase-client</artifactId>
                <version>2.4.2</version>
            </dependency>
            </dependencies>
        
      2. 依存関係が所属するテストアーキテクチャを junit、名前を junit、バージョン番号を 4.10 と指定します。

        コード:

            <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.10</version>
            </dependency>
            </dependencies>
        
      3. 依存関係が所属するアーキテクチャを org.mybatis、名前を mybatis、バージョン番号を 3.5.9 と指定します。

        コード:

            <dependencies>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.9</version>
            </dependency>
            </dependencies>
        
      4. 依存関係が所属するプラグインを com.github.pagehelper、名前を pagehelper、バージョン番号を 5.3.0 と指定します。

        コード:

            <dependencies>
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>5.3.0</version>
            </dependency>
            </dependencies>
        

    jdbc.propertiesのコード紹介

    jdbc.properties は、データベース接続関連の設定情報を格納しているプロパティファイルです。データベースのURL、ユーザー名、パスワードなどが含まれます。コードに含まれる内容は以下のとおりです:

    説明

    コード内の各フィールドの値は、ステップ1:OceanBaseデータベース接続文字列を取得するから取得します。

    • jdbc.driver:データベースドライバープログラムのクラス名で、データベースドライバーを読み込むために使用されます。
    • jdbc.url:データベースのURLアドレスで、接続するデータベースを指定するために使用されます。
    • jdbc.username:データベースのユーザー名で、データベース接続を検証するために使用されます。
    • jdbc.password:データベースのパスワードで、データベース接続を検証するために使用されます。

    コード:

    jdbc.driver=com.oceanbase.jdbc.Driver
    jdbc.url=jdbc:oceanbase://host:port/TEST?useServerPrepStmts=true&rewriteBatchedStatements=true
    jdbc.username=user_name
    jdbc.password=******
    

    mybatis-config.xmlの紹介

    mybatis-config.xml ファイルは、MyBatisフレームワークのグローバルプロパティやプラグインなどを設定するために使用されます。

    mybatis-config.xml ファイルのコードには、主に以下の部分が含まれます:

    1. ファイル宣言です。

      このファイルがXMLファイルであることを宣言しています。この宣言は、この記事がMyBatis設定ファイルであり、使用するXMLバージョンは 1.0、文字エンコード方式は UTF-8 であることを示しています。バージョン番号は3.0、言語は英語で、MyBatis公式Webサイトが提供するDTD(Document Type Definition)ファイルによる検証が使用されています。

      宣言には以下の部分が含まれます:

      • version:XMLファイルのバージョンを指定します。
      • encoding:XMLファイルのエンコーディング方式を指定します。
      • DOCTYPE:タイプをドキュメントタイプ宣言と宣言します。
      • configuration:ドキュメントタイプをMyBatis設定ファイルと指定します。
      • PUBLIC:ドキュメントタイプを公開ドキュメントタイプと指定します。
      • mybatis.org:MyBatisの公式Webサイトを表します。
      • DTD Config 3.0:MyBatis設定ファイルのバージョン番号を表します。
      • EN:ドキュメントタイプの言語が英語であることを表します。

      コード:

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
      
    2. 読み込むプロパティファイルのパスとファイル名を指定します。

      <properties resource="jdbc.properties"></properties>
      
    3. MyBatisのグローバル設定を設定します。

      MyBatisのグローバル設定には以下の部分が含まれています:

      • setting:キャッシュ、ログなどの個々の構成パラメータを設定するために使用されます。
      • cacheEnabled:キャッシュ機能を有効または無効にします。true に設定します。
      • lazyLoadingEnabled:遅延ロード機能を有効または無効にします。true に設定します。
      • aggressiveLazyLoading:積極的な遅延ロード機能を有効または無効にします。true に設定します。
      • multipleResultSetsEnabled:複数の結果セットのサポートを有効にするかどうかを true に設定します。
      • useColumnLabel:結果セット内の列名として列ラベルを使用するかどうかを true に設定します。
      • useGeneratedKeys:自動生成された主キーを使用するかどうかを true に設定します。
      • autoMappingBehavior:自動マッピングの処理動作を PARTIAL に設定します。
      • defaultExecutorType:デフォルトのエグゼキュータータイプを SIMPLE に設定します。
      • mapUnderscoreToCamelCase:データベース列名のアンダースコア(_)をJavaオブジェクトのプロパティ名におけるキャメルケースに変換するかどうかを trueに設定します。
      • localCacheScope:ローカルキャッシュのスコープを SESSION に設定します。
      • jdbcTypeForNull:NULL値を処理する際に使用するJDBCタイプを NULL に設定します。

      説明

      settings要素のサブ要素はオプションであり、必要に応じて追加または削除できます。

      コード:

      <settings>
          <!-- Enable or disable caching for global mappers. -->
          <setting name="cacheEnabled" value="true"/>
          <!-- Enable or disable lazy loading globally. When disabled, all associated objects are loaded immediately. -->
          <setting name="lazyLoadingEnabled" value="true"/>
          <!-- When enabled, objects with delayed loading properties will fully load any properties when called. Otherwise, each attribute will be loaded as needed. -->
          <setting name="aggressiveLazyLoading" value="true"/>
          <!-- Allow a single SQL statement to return multiple datasets (depending on driver compatibility) default: true -->
          <setting name="multipleResultSetsEnabled" value="true"/>
          <!-- Can column aliases be used (depending on driver compatibility) default: true -->
          <setting name="useColumnLabel" value="true"/>
          <!-- Allow JDBC to generate primary keys. Drive support is required. If set to true, this setting will force the use of the generated primary key, and some drives may not be compatible but can still be executed. default:false -->
          <setting name="useGeneratedKeys" value="true"/>
          <!-- Specify how MyBatis automatically maps the columns of the data base table NONE: Not Implicit PART: Partial FULL: All -->
          <setting name="autoMappingBehavior" value="PARTIAL"/>
          <!-- This is the default execution type (SIMPLE: simple; REUSE: executor may repeatedly use prepared statements; BATCH: executor can repeatedly execute statements and batch updates) -->
          <setting name="defaultExecutorType" value="SIMPLE"/>
          <!-- Convert fields using camel naming. -->
          <setting name="mapUnderscoreToCamelCase" value="true"/>
          <!-- Set the local cache range session: there will be data sharing statement: statement range (so there will be no data sharing) defalut: session -->
          <setting name="localCacheScope" value="SESSION"/>
          <!-- When the JDBC type is set to null, some drivers need to specify a value, default: Other, and there is no need to specify a type when inserting null values -->
          <setting name="jdbcTypeForNull" value="NULL"/>
      </settings>
      
    4. MyBatisのプラグインを設定します。

      MyBatisのプラグインには以下の部分が含まれます:

      • plugin:個々のプラグインを設定します。
      • property:プラグインのプロパティを指定します。
      • interceptor:プラグインの実装クラスを指定します。
      • helperDialect:選択されたデータベースを指定します。
      • offsetAsPageNum:offsetパラメータをpageNumパラメータとして使用するかどうかを表します。
      • rowBoundsWithCount:countクエリを実行するかどうかを表します。
      • pageSizeZero:pageSizeが0のクエリをサポートするかどうかを表します。
      • reasonable:クエリの最適化を有効にするかどうかを表します。
      • params:ページネーションパラメータを渡すためのパラメータ名とパラメータ値のマッピング関係を表します。
      • supportMethodsArguments:メソッドのパラメータを使用してページネーションパラメータを渡すことをサポートするかどうかを表します。
      • returnPageInfo:戻り値のタイプを表します。

      コード:

      <plugin interceptor="com.github.pagehelper.PageInterceptor">
         <!-- this parameter indicates which database to connect to -->
         <!--MySQLMode dialect<property name="helperDialect" value="mysql"/>-->
         <!--OracleMode dialect -->
         <property name="helperDialect" value="oracle"/>
         <!-- This parameter defaults to false. When set to true, the first parameter offset of RowBounds will be used as the pageNum page number, similar to the pageNum effect in startPage -->
         <property name="offsetAsPageNum" value="true"/>
         <!-- This parameter defaults to false, and when set to true, using RowBounds pagination will result in a count query -->
         <property name="rowBoundsWithCount" value="true"/>
         <!-- When set to true, if pageSize=0 or RowBounds. limit=0, all results will be queried (equivalent to not executing a pagination query, but the returned results are still of type Page) -->
         <property name="pageSizeZero" value="true"/>
         <!-- Version 3.3.0 is available - pagination parameter rationalization is disabled by default as false. When rationalization is enabled, if pageNum<1, the first page will be queried, and if pageNum>pages, the last page will be queried. Rationalization of paging parameters. When rationalization is disabled, if pageNum<1 or pageNum>pages returns empty data -->
         <property name="reasonable" value="false"/>
         <!-- Version 3.5.0 is available - In order to support the startPage (Object params) method, a 'params' parameter has been added to configure parameter mapping, which can be used to retrieve values from Map or ServletRequest. PageNum, pageSize, count, pageSizeZero, reasonable, orderBy can be configured. If mapping is not configured, the default value will be used. If you do not understand the meaning, do not copy this configuration casually -->
         <property name="params" value="pageNum=start;pageSize=limit;"/>
         <!-- Support passing paging parameters through Mapper interface parameters -->
         <property name="supportMethodsArguments" value="true"/>
         <!-- Always always returns PageInfo type, check to check if the return type is PageInfo, and none returns Page -->
         <property name="returnPageInfo" value="check"/>
      </plugin>
      
    5. MyBatisの環境を設定します。 MyBatisの環境には以下の部分が含まれます:

      • environment:個々の環境を設定します。
      • transactionManager:トランザクションマネージャーの実装クラスを指定します。
      • dataSource:データソースの実装クラスを指定します。
      • property:データベースドライバープログラムのクラス名を指定します。

      説明

      MyBatisの他の設定要素では、${} プレースホルダーを使用して、環境で設定されたデータソース、トランザクションマネージャー、エグゼキューターなどを参照できます。

      コード:

      <environments default="development">
          <environment id="development">
            <transactionManager type="JDBC"/>
              <dataSource type="POOLED">
                  <property name="driver" value="${jdbc.driver}"/>
                  <property name="url" value="${jdbc.url}"/>
                  <property name="username" value="${jdbc.username}"/>
                  <property name="password" value="${jdbc.password}"/>
              </dataSource>
          </environment>
      </environments>
      
    6. MyBatisのマッパーを設定します。

      MyBatisのマッパーでよく使用される要素は以下のとおりです:

      • resource:マッパーのXML設定ファイルのパスとファイル名を指定します。
      • class:マッパーのJavaクラス名を指定します。

      説明

      XML設定ファイルを使用する場合は、mapper要素でXMLファイルのパスとファイル名を指定する必要があります。Javaインターフェースを使用する場合は、mapper要素でJavaクラスの完全修飾名を指定する必要があります。

      コード:

      <mappers>
        <!-- IUserMapper.xml mapping file -->
        <mapper resource="com/alipay/oceanbase/mapper/IUserMapper.xml"></mapper>
        <!-- IAppMapper mapping class -->
        <mapper class="com.oceanbase.mapper.IAppMapper"></mapper>
      </mappers>
      

    IUserMapper.xmlのコード紹介

    IUserMapper.xml ファイルは、ユーザーオブジェクトに関連付けられたSQLステートメントを定義するマッピングファイルです。このファイルでは、ユーザーオブジェクトに関連付けられたSQLステートメントを格納するための IUserMapper というネームスペースが定義されています。

    説明

    例を確認するだけの場合、デフォルトコードを使用してください。修正する必要はありません。変更が必要な場合は、実際の状況に応じて変更してください。

    IUserMapper.xml ファイルのコードには、主に以下の部分が含まれます:

    1. ファイル宣言ステートメントです。 XMLファイルの宣言セクションでは、XMLファイルのバージョンとエンコード方式を指定します。DTDファイルの宣言セクションでは、MyBatisのDTDファイルをインポートします。 コード:

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mapper
           PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
           "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      
    2. IUserMapper.java とのマッピング関係を設定します。

      1. Javaコード内の Mapper インターフェースと対応する Mapper インターフェースのネームスペースを定義します。
      2. insertUser という名前のSQLステートメントを作成し、test_user テーブルにレコードを挿入します。id と name の2つのフィールドを含み、値はそれぞれ #{id} と #{name} です。parameterType プロパティは、渡されるパラメータのタイプを com.oceanbase.pojo.User と指定します。
      3. deleteUser という名前のSQLステートメントを作成し、test_user テーブルからレコードを削除します。id フィールドの値が #{id} に一致するレコードを削除します。
      4. updateUser という名前のSQLステートメントを作成し、test_user テーブル内のレコードを更新します。id フィールドの値が #{id} に一致するレコードの name フィールドの値を #{name} に更新します。
      5. selectUsers という名前のSQLステートメントを作成し、test_user テーブル内のすべてのユーザーレコードのクエリを実行します。
      6. selectUserByPage という名前のSQLステートメントを作成し、test_user テーブルから指定されたページ数のユーザーオブジェクトのクエリを実行します。サブクエリと rownum フィールドを使用してページネーションクエリを実行します。#{pageNum} と #{pageSize} は、現在のページ番号と1ページあたりのレコード数を表します。

      コード:

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.oceanbase.mapper.IUserMapper">
          <insert id="insertUser" parameterType="com.oceanbase.pojo.User">
              INSERT INTO test_user (id,name) VALUES (#{id},#{name})
          </insert>
          <delete id="deleteUser" parameterType="long">
              DELETE FROM test_user WHERE id = #{id}
          </delete>
          <update id="updateUser" parameterType="com.oceanbase.pojo.User">
              UPDATE test_user SET name = #{name} WHERE id = #{id}
          </update>
          <select id="selectUsers" resultType="com.oceanbase.pojo.User">
              SELECT id,name FROM test_user
          </select>
          <!--    There are two ways to paginate queries: 1. Use the pagehelper plugin; 2. Use SQL statements to paginate  -->
          <!-- SQL statement pagination: Oracle mode does not support the limit keyword, and instead uses the unique field 'rownum'-->
          <select id="selectUserByPage" resultType="com.oceanbase.pojo.User">
              select id,name from ( select row_.*, rownum rownum_ from ( select * from test_user ) row_ where rownum
              <![CDATA[ <= ]]>  #{pageNum} * #{pageSize} ) where rownum_ <![CDATA[ >]]>  ( #{pageNum}- 1) * #{pageSize}
          </select>
      </mapper>
      

    IAppMapper.javaのコード紹介

    IAppMapper.java ファイルは、SQLマッピング関係を定義するために使用されます。

    IAppMapper.java ファイルのコードには、主に以下の部分が含まれます:

    1. Mapper パッケージを定義します。

      現在のファイルが属するパッケージ名を com.oceanbase.mapper と宣言します。 Mapper パッケージには、以下のインターフェースとクラスが含まれます:

      • App インターフェース:データベーステーブルとのマッピングを表し、データの読み書き操作を実装します。
      • org.apache.ibatis.annotations.*:MyBatisのアノテーションクラスをインポートします。
      • java.util.List:java.util パッケージの List クラスをインポートします。 コード:
      package com.oceanbase.mapper;
      import com.oceanbase.pojo.App;
      import org.apache.ibatis.annotations.*;
      import java.util.List;
      
    2. IAppMapper インターフェースを定義します。 IAppMapper インターフェースは、MyBatisの Mapper インターフェースを定義するために使用されます。Mapper インターフェースは、SQLマッピング関係を定義し、データベースに対する追加、削除、変更、クエリの操作を実装するために使用されます。具体的には、IAppMapper インターフェースは test_app テーブルに対する追加、削除、変更、クエリのメソッドを定義します。いかが含みます:

      • @Insert メソッド:データベースにデータを挿入します。
      • @Update メソッド:データベース内のデータを更新します。
      • @Delete メソッド:データベース内のデータを削除します。
      • @Select メソッド:データベース内のデータのクエリを実行します。
      • @Results メソッド:クエリ結果のマッピング関係を表し、クエリ結果のフィールドをJavaオブジェクトのプロパティにマッピングします。 データベースに対する追加、削除、変更、クエリの操作は以下のとおりです:
      1. データの挿入 Appオブジェクトを test_app テーブル内のレコードにマッピングします。Appオブジェクトのプロパティ値は #{プロパティ名} の形式でプレースホルダーとして使用されます。Integer タイプの戻り値は、SQLステートメントによるデータの挿入後に返される自動生成されたID、つまり test_app テーブル内のIDフィールドに対応する値となります。

        @Insert("insert into test_app(id,name) values(#{id},#{name})")
        Integer insertApp(App app);
        
      2. データの削除 test_app テーブルから、IDが #{id} のデータを削除します。

        @Delete("delete from test_app  where id =#{id}")
        Integer deleteApp(Long id);
        
      3. データの更新 test_app テーブル内のレコードを変更するには、Update操作を実行する必要があります。

        @Update("update test_app set name= #{name} where id = #{id}")
        Integer updateApp(App user);
        
      4. データのクエリとマッピング test_app テーブルのすべてのデータのクエリを実行します。同時に、@Results アノテーションと @Result アノテーションを使用して、クエリ結果をAppオブジェクトの id および name プロパティにマッピングします。最終的にAppオブジェクトのリストを返します。

        @Update("update test_app set name= #{name} where id = #{id}")
        Integer updateApp(App user);
        @Results({
            @Result(id = true, column = "id", property = "id"),
            @Result(column = "name", property = "name")
            })
        List<App> selectApps();
        

      コード:

      package com.oceanbase.mapper;
      import com.oceanbase.pojo.App;
      import org.apache.ibatis.annotations.*;
      import java.util.List;
      public interface IAppMapper {
          @Insert("insert into test_app(id,name) values(#{id},#{name})")
          Integer insertApp(App app);
      
          @Delete("delete from test_app  where id =#{id}")
          Integer deleteApp(Long id);
      
          @Update("update test_app set name= #{name} where id = #{id}")
          Integer updateApp(App user);
      
          @Select("select * from test_app")
          @Results({
                  @Result(id = true, column = "id", property = "id"),
                  @Result(column = "name", property = "name")
          })
          List<App> selectApps();
      }
      

    IUserMapper.javaのコード紹介

    IUserMapper.java ファイルは、データベース操作のメソッドを定義するために使用されます。

    IUserMapper.java ファイルのコードには、主に以下の部分が含まれます:

    1. 他のクラスとインターフェースをインポートします。

      このファイルに含まれるインターフェースとクラスを宣言します:

      • User クラス:ユーザーオブジェクトを表します。
      • org.apache.ibatis.annotations.Param クラス:MyBatisフレームワークのパラメータアノテーションです。
      • List インターフェース:リストタイプを表します。 コード:
      package com.oceanbase.mapper;
      import com.oceanbase.pojo.User;
      import org.apache.ibatis.annotations.Param;
      import java.util.List;
      
    2. IUserMapper インターフェースを定義します。

      IUserMapper という名前のインターフェースを定義し、その中で、ユーザーデータの挿入、削除、更新、クエリのメソッドと、ユーザーデータのページネーションクエリを実行するメソッドを定義します。同時に、JavaDoc コメントと @Param アノテーションを使用して、コードの可読性と保守性を向上させます。 コード:

       public interface IUserMapper {
      
           Integer insertUser(User user);
      
           Integer deleteUser(Long id);
      
           Integer updateUser(User user);
      
           List<User> selectUsers();
      
           public List<User> selectUserByPage(@Param("user") User user, @Param("pageNum") Integer pageNum,
                                           @Param("pageSize") Integer pageSize);
       }
      

    App.javaのコード紹介

    App.java ファイルは、Appアプリケーションオブジェクトを表すために使用されます。id と name の2つのプロパティが含まれます。クラスには他にも、プロパティのアクセスメソッドとコンストラクタメソッド、およびオブジェクトを文字列に変換する toString メソッドも定義されています。

    App.java ファイルのコードには、主に以下の部分が含まれます:

    1. pojo パッケージを定義します。 このファイルが属するパッケージ名を com.oceanbase.pojo と宣言します。
    2. App クラスを定義します。
      1. App というクラスを定義します。クラスには id と name という2つのプライベートプロパティ、およびパラメータなしのコンストラクタメソッド public App(){} が含まれます。
      2. パラメータありのコンストラクタメソッド public App(Long id, String name) を定義します。このメソッドは、指定された id と name を持つアプリケーションオブジェクトを作成するために使用されます。
      3. getId メソッド、setId メソッド、getName メソッド、setName メソッドを定義し、アプリケーション名を取得および設定します。setName メソッドは、アプリケーションの名前を設定して返します。
      4. toString メソッドをオーバーライドして、アプリケーションオブジェクトを文字列表現に変換し、出力とデバッグを容易にします。

    コード:

       package com.oceanbase.pojo;
    
       public class App {
           private Long id;
           private String name;
    
           public App() {
           }
    
           public App(Long id, String name) {
                this.id = id;
               this.name = name;
           }
    
           public Long getId() {
               return id;
           }
    
           public void setId(Long id) {
               this.id = id;
           }
    
           public String getName() {
               return name;
           }
    
           public void setName(String name) {
               this.name = name;
           }
    
           @Override
           public String toString() {
               return "App{" +
                       "id=" + id +
                       ", name='" + name + '\'' +
                       '}';
           }
       }
    

    User.javaのコード紹介

    User.java ファイルは、ユーザーオブジェクトを表すために使用されます。id と name の2つのプロパティが含まれます。クラスには他にも、プロパティのアクセスメソッドとコンストラクタメソッド、およびオブジェクトを文字列に変換する toString メソッドも定義されています。 このクラスは、上記の App.java コードと類似しています。

    コード:

    package com.oceanbase.pojo;
    
    public class User {
        private Long id;
        private String name;
    
        public User() {
        }
    
        public User(Long id, String name) {
            this.id = id;
            this.name = name;
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long 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 + '\'' +
                    '}';
        }
    }
    

    MyBatisTest.javaファイルの紹介

    MyBatisTest.javaは、MyBatisを使用したデータ操作を行う方法を示すためのものです。MyBatisフレームワークの基本機能とSQLステートメントの実行状況、Mapperインターフェースの呼び出し方法、SQLステートメントのパラメータと戻り値などをテストします。

    1. 他のクラスとインターフェースをインポートします。

      使用するクラスとインターフェースをインポートします:

      • IAppMapper インターフェース:Appオブジェクトに関連するSQLステートメントを定義します。
      • IUserMapper インターフェース:Userオブジェクトに関連付するSQLステートメントを定義します。
      • App クラス:Appオブジェクトです。SQLステートメントの実行状況をテストするために使用されます。
      • User クラス:Userオブジェクトです。SQLステートメントの実行状況をテストするために使用されます。
      • PageHelper プラグイン:ページネーションクエリの機能を実装するのに使用されます。
      • PageInfo プラグイン:ページネーションクエリの結果をカプセル化するのに使用されます。
      • Resources クラス:MyBatis設定ファイルの読み込みに使用されます。
      • SqlSession クラス:SQLステートメントを実行し、トランザクションを管理します。
      • SqlSessionFactory クラス:SqlSessionオブジェクトの作成に使用されます。
      • SqlSessionFactoryBuilder クラス:SqlSessionFactoryオブジェクトの作成に使用されます。
      • org.junit.Test:JUnitテストフレームワークのアノテーションで、テストメソッドをマークするために使用されます。
      • IOException クラス:入出力操作中のエラーを表すために使用されます。
      • SQLException クラス:SQL操作中のエラーを表すために使用されます。
      • Statement インターフェース:SQLステートメントを実行し、結果を返すために使用されます。
      • java.util.List インターフェース:順序付けられたコレクションを表します。要素は重複する場合もあります。

      コード:

      import com.oceanbase.mapper.IAppMapper;
      import com.oceanbase.mapper.IUserMapper;
      import com.oceanbase.pojo.App;
      import com.oceanbase.pojo.User;
      import com.github.pagehelper.PageHelper;
      import com.github.pagehelper.PageInfo;
      import org.apache.ibatis.io.Resources;
      import org.apache.ibatis.session.SqlSession;
      import org.apache.ibatis.session.SqlSessionFactory;
      import org.apache.ibatis.session.SqlSessionFactoryBuilder;
      import org.junit.Test;
      import java.io.IOException;
      import java.sql.SQLException;
      import java.sql.Statement;
      import java.util.List;
      
    2. testUserMapper メソッドを定義します。

      testUserMapper メソッドは、User オブジェクトの Mapper インターフェースで定義されたSQLステートメントの実行状況をテストするために使用されます。

      1. SqlSessionFactoryBuilder クラスの build() メソッドを使用して、SqlSessionFactory インスタンスを作成します。SqlSession インスタンスの作成と破棄を管理するために使用されます。
      2. SqlSessionFactory の openSession() メソッドを使用して、SqlSession インスタンスを作成します。クエリ、挿入、更新、削除などのさまざまなSQLステートメントを実行できます。
      3. SqlSession インスタンスの getConnection() メソッドを使用して、Connection インスタンスを取得します。さまざまなデータベース操作を実行できます。
      4. Connection インスタンスの createStatement() メソッドを使用して、Statement インスタンスを作成します。SQLステートメントを順番に実行します。
      5. Statement オブジェクトの execute() メソッドを使用して、test_user テーブルを削除するSQLステートメントを実行します。
      6. Statement オブジェクトの execute() メソッドを使用して、test_user テーブルを作成します。このテーブルには2つのフィールドが含まれています。1つは id で、タイプは number(20)、主キーとして機能します。もう1つは name で、タイプは varchar2(100) です。
      7. SqlSession インスタンスの getMapper() メソッドを使用して、IUserMapper インターフェースのインスタンスを取得します。さまざまなデータベース操作メソッドを定義します。
      8. for ループを使用して、test_user テーブルに10件のデータを挿入します。各ループで新しい User オブジェクトを作成し、Mapper インターフェースの insertUser() メソッドを使用して挿入操作を実行します。挿入操作の実行結果は、insertResult 変数に格納されます。
      9. test_user テーブルのデータに対して削除、更新、クエリの操作を行い、最後に forEach() メソッドを使用して、ユーザーリスト内の各ユーザーの情報を出力します。
      10. insert という名前のユーザーを作成し、selectUserByPage() メソッドを使用して test_user テーブル内の名前が "insert" であるすべてのユーザーデータのクエリを実行し、指定されたページのユーザーリストを返します。クエリが実行されるのは2ページ目で、1ページあたり3件のデータが表示されます。これらのユーザーデータをコンソールに出力します。同時に、Statement と SqlSession インスタンスを閉じ、トランザクションをコミットしてリソースを解放します。

      コード:

          public void testUserMapper() throws SQLException, IOException {
              //mybatis xml usecases
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
              SqlSession sqlSession = sqlSessionFactory.openSession();
              Statement statement = sqlSession.getConnection().createStatement();
              try {
                  statement.execute("drop table test_user");
              } catch (SQLException ex) {
              } finally {
                  statement.execute("create table test_user(id number(20) primary key,name varchar2(100))");
              }
              IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
              //insert 10 users
              for (int i = 1; i <= 10; i++) {
                  User user = new User((long) i, "insert");
                  Integer insertResult = mapper.insertUser(user);
              }
              //delete id==1
              Integer deleteResult = mapper.deleteUser(1L);
              //update id==2L name=update
              User updateUser = new User(2L, "update");
              Integer updateResult = mapper.updateUser(updateUser);
              //selectUsers query all
              List<User> userList = mapper.selectUsers();
              userList.forEach(System.out::println);
              //selectUsersByPage:use the rownum keyword in SQL statements to manually perform pagination queries,
              // example: data on page 2 (3 items per page)
              User user = new User();
              user.setName("insert");
              List<User> usersByPage = mapper.selectUserByPage(user, 2, 3);
              System.out.println("usersByPage = " + usersByPage);
              statement.close();
              sqlSession.commit();
              sqlSession.close();
          }
      
    3. testSqlSession メソッドを定義します。

      testSqlSession メソッドは、SqlSessionオブジェクトの基本機能をテストするために使用されます。SQLステートメントの実行、トランザクションのコミット、SqlSessionオブジェクトのクローズなどが含まれます。

      1. SqlSessionFactoryBuilder クラスの build() メソッドを使用して、SqlSessionFactory インスタンスを作成します。SqlSession インスタンスの作成と破棄を管理するために使用されます。
      2. SqlSessionFactory の openSession() メソッドを使用して、SqlSession インスタンスを作成します。クエリ、挿入、更新、削除などのさまざまなSQLステートメントを実行できます。
      3. SqlSession インスタンスの getConnection() メソッドを使用して、Connection インスタンスを取得します。さまざまなデータベース操作を実行できます。
      4. Connection インスタンスの createStatement() メソッドを使用して、Statement インスタンスを作成します。SQLステートメントを順番に実行します。
      5. Statement オブジェクトの execute() メソッドを使用して、test_user テーブルを削除するSQLステートメントを実行します。
      6. Statement オブジェクトの execute() メソッドを使用して、test_user テーブルを作成します。このテーブルには2つのフィールドが含まれています。1つは id で、タイプは number(20)、主キーとして機能します。もう1つは name で、タイプは varchar2(100) です。
      7. for ループを使用して、test_user テーブルに10件のデータを挿入します。各ループで新しい User オブジェクトを作成し、Mapper インターフェースの insertUser() メソッドを使用して挿入操作を実行します。挿入操作の実行結果は、insertResult 変数に格納されます。
      8. sqlSession の delete() メソッドを使用して、削除操作を実行します。パラメータ 1Lを渡すことで、削除条件を設定します。削除操作の結果は、deleteResult 変数に格納されます。
      9. sqlSession オブジェクトを使用してデータベースの更新操作を実行します。User オブジェクトを作成し、update メソッドを呼び出します。SQLステートメントの識別子とパラメータオブジェクトを渡して、更新操作を完了します。具体的なSQLステートメントとパラメータのマッピング関係は、"com.oceanbase.mapper.IUserMapper" インターフェースのXML設定ファイルにあります。更新操作の結果は、updateResult 変数に格納されます。
      10. SqlSessionFactory の openSession() メソッドを使用して SqlSession インスタンスを作成します。このインスタンスでクエリ操作を実行し、クエリ結果を userList 変数に格納します。最後に、forEach メソッドを使用して userList をイテレーションし、コンソールに出力します。
      11. statement.close() を使用して、データベース接続内の Statement オブジェクトを閉じます。次に、sqlSession.commit() を使用してトランザクションをコミットし、すべての変更をデータベースに永続化します。最後に、sqlSession.close() を使用して SqlSession オブジェクトを閉じ、関連するリソースを解放し、データベースとの接続を閉じます。

      コード:

          public void testSqlSession() throws SQLException, IOException {
              //SqlSession usecases
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
              SqlSession sqlSession = sqlSessionFactory.openSession();
              Statement statement = sqlSession.getConnection().createStatement();
              try {
                  statement.execute("drop table test_user");
              } catch (SQLException ex) {
              } finally {
                  statement.execute("create table test_user(id number(20) primary key,name varchar2(100))");
              }
              //insert
              for (int i = 1; i <= 10; i++) {
                  User user = new User((long) i, "insert");
                  //Integer insertResult = mapper.insertUser(user);
                  int insertResult = sqlSession.insert("com.oceanbase.mapper.IUserMapper.insertUser", user);
              }
              //delete
              int deleteResult = sqlSession.delete("com.oceanbase.mapper.IUserMapper.deleteUser", 1L);
              //update
              User updateUser = new User(2L, "update");
              int updateResult = sqlSession.update("com.oceanbase.mapper.IUserMapper.updateUser", updateUser);
              //selectUsers
              List<User> userList = sqlSession.selectList("com.oceanbase.mapper.IUserMapper.selectUsers", null);
              userList.forEach(System.out::println);
              //System.out.println("userList = " + userList);
              statement.close();
              sqlSession.commit();
              sqlSession.close();
          }
      
    4. testAppMapper メソッドを定義します。

      testAppMapper メソッドは、AppMapperの機能をテストするために使用されます。

      1. SqlSessionFactoryBuilder クラスの build() メソッドを使用して、SqlSessionFactory インスタンスを作成します。SqlSession インスタンスの作成と破棄を管理するために使用されます。
      2. SqlSessionFactory の openSession() メソッドを使用して、SqlSession インスタンスを作成します。クエリ、挿入、更新、削除などのさまざまなSQLステートメントを実行できます。
      3. SqlSession インスタンスの getConnection() メソッドを使用して、Connection インスタンスを取得します。さまざまなデータベース操作を実行できます。
      4. Connection インスタンスの createStatement() メソッドを使用して、Statement インスタンスを作成します。SQLステートメントを順番に実行します。
      5. Statement オブジェクトの execute() メソッドを使用して、test_app テーブルを削除するSQLステートメントを実行します。
      6. Statement オブジェクトの execute() メソッドを使用して、test_app テーブルを作成します。このテーブルには2つのフィールドが含まれています。1つは id で、タイプは number(20)、主キーとして機能します。もう1つは name で、タイプは varchar2(100) です。
      7. SqlSession インスタンスの getMapper() メソッドを使用して、IAppMapper インターフェースのインスタンスを取得します。さまざまなデータベース操作メソッドを定義します。
      8. for ループを使用して、test_app テーブルに10件のデータを挿入します。各ループで新しいAppオブジェクトを作成し、Mapper インターフェースの insertApp() メソッドを使用して挿入操作を実行します。挿入操作の実行結果は、insertResult 変数に格納されます。
      9. mapper の delete() メソッドを使用して、削除操作を実行します。パラメータ 1L を渡すことで、削除条件を設定します。削除操作の結果は、deleteResult 変数に格納されます。
      10. mapper オブジェクトを使用して、データベースの更新操作を実行します。Appオブジェクトを作成し、update メソッドを呼び出してSQLステートメントの識別子とパラメータオブジェクトを渡し、更新操作を完了します。
      11. App オブジェクト updateApp を作成し、id を 2L、name に "update" します。
      12. mapper の updateApp メソッドを呼び出して updateApp オブジェクトを渡し、更新操作を実行します。
      13. sqlSession の commit メソッドを呼び出して、データベーストランザクションをコミットします。
      14. mapper の selectApps メソッドを呼び出して、すべてのAppオブジェクトのクエリを実行します。forEach メソッドを使用して userList をイテレーションし、コンソールに出力します。
      15. PageHelper の startPage メソッドを呼び出し、ページ番号と1ページあたりのデータ数を渡して、ページネーションパラメータを設定します。すべての App オブジェクトのクエリを実行し、すべての App オブジェクトを含む List オブジェクトを返します。
      16. PageInfo の getList メソッドを呼び出して、ページネーションされたAppオブジェクトのリストを取得します。System.out.println メソッドを使用して、ページネーションされた App オブジェクトのリストを出力します。
      17. sqlSession.close() を使用して SqlSession オブジェクトを閉じ、関連するリソースを解放します。

      コード:

          public void testAppMapper() throws SQLException, IOException {
              //mybatis annotation usecases
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
              SqlSession sqlSession = sqlSessionFactory.openSession();
              Statement statement = sqlSession.getConnection().createStatement();
              try {
                  statement.execute("drop table test_app");
              } catch (SQLException ex) {
              } finally {
                  statement.execute("create table test_app(id number(20) primary key,name varchar2(100))");
              }
      
              IAppMapper mapper = sqlSession.getMapper(IAppMapper.class);
      
              //insert
              for (int i = 1; i <= 10; i++) {
                  App app = new App((long) i, "insert" + i);
                  Integer insertResult = mapper.insertApp(app);
              }
      
              //delete
              Integer deleteResult = mapper.deleteApp(1L);
              //update
              App updateApp = new App(2L, "update");
              Integer updateResult = mapper.updateApp(updateApp);
              //commit
              sqlSession.commit();
      
              //selectApps
              List<App> appList = mapper.selectApps();
              appList.forEach(System.out::println);
      
              //selectbyPage
              //set page parameters
              PageHelper.startPage(2, 3);
              //selectApps
              List<App> appList1 = mapper.selectApps();
              //get pageList
              PageInfo pageInfo = new PageInfo(appList1);
              List<App> pageList = pageInfo.getList();
              System.out.println("pageList = " + pageList);
      
              sqlSession.close();
          }
      

    全コード表示

    pom.xml
    jdbc.properties
    mybatis-config.xml
    IUserMapper.xml
    IAppMapper.java
    IUserMapper.java
    App.java
    User.java
    TestMybatis.java
        <?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.example</groupId>
            <artifactId>java-oceanbase-mybatis</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>com.oceanbase</groupId>
                    <artifactId>oceanbase-client</artifactId>
                    <version>2.4.2</version>
                </dependency>
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.10</version>
                </dependency>
                <dependency>
                    <groupId>org.mybatis</groupId>
                    <artifactId>mybatis</artifactId>
                    <version>3.5.9</version>
                </dependency>
                <!--  pagehelper plug-in -->
                <dependency>
                    <groupId>com.github.pagehelper</groupId>
                    <artifactId>pagehelper</artifactId>
                    <version>5.3.0</version>
                </dependency>
            </dependencies>
        </project>
    
    jdbc.driver=com.oceanbase.jdbc.Driver
    jdbc.url=jdbc:oceanbase://host:port/TEST?useServerPrepStmts=true&rewriteBatchedStatements=true
    jdbc.username=user_name
    jdbc.password=******
    
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
        <configuration>
          <properties resource="jdbc.properties"></properties>
          <settings>
              <setting name="cacheEnabled" value="true"/>
              <setting name="lazyLoadingEnabled" value="true"/>
              <setting name="aggressiveLazyLoading" value="true"/>
              <setting name="multipleResultSetsEnabled" value="true"/>
              <setting name="useColumnLabel" value="true"/>
              <setting name="useGeneratedKeys" value="true"/>
              <setting name="autoMappingBehavior" value="PARTIAL"/>
              <setting name="defaultExecutorType" value="SIMPLE"/>
              <setting name="mapUnderscoreToCamelCase" value="true"/>
              <setting name="localCacheScope" value="SESSION"/>
              <setting name="jdbcTypeForNull" value="NULL"/>
          </settings>
          <plugins>
              <plugin interceptor="com.github.pagehelper.PageInterceptor">
    
                  <property name="helperDialect" value="oracle"/>
    
                  <property name="offsetAsPageNum" value="true"/>
                  <property name="rowBoundsWithCount" value="true"/>
                  <property name="pageSizeZero" value="true"/>
    
                  <property name="reasonable" value="false"/>
    
                  <property name="params" value="pageNum=start;pageSize=limit;"/>
                  <property name="supportMethodsArguments" value="true"/>
                  <property name="returnPageInfo" value="check"/>
              </plugin>
          </plugins>
          <environments default="development">
              <environment id="development">
                  <transactionManager type="JDBC"/>
                  <dataSource type="POOLED">
                      <property name="driver" value="${jdbc.driver}"/>
                      <property name="url" value="${jdbc.url}"/>
                      <property name="username" value="${jdbc.username}"/>
                      <property name="password" value="${jdbc.password}"/>
                  </dataSource>
              </environment>
          </environments>
          <mappers>
              <mapper resource="com/alipay/oceanbase/mapper/IUserMapper.xml"></mapper>
              <mapper class="com.oceanbase.mapper.IAppMapper"></mapper>
          </mappers>
        </configuration>
    
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE mapper
                PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        <mapper namespace="com.oceanbase.mapper.IUserMapper">
            <insert id="insertUser" parameterType="com.oceanbase.pojo.User">
                INSERT INTO test_user (id,name) VALUES (#{id},#{name})
            </insert>
            <delete id="deleteUser" parameterType="long">
                DELETE FROM test_user WHERE id = #{id}
            </delete>
            <update id="updateUser" parameterType="com.oceanbase.pojo.User">
                UPDATE test_user SET name = #{name} WHERE id = #{id}
            </update>
            <select id="selectUsers" resultType="com.oceanbase.pojo.User">
                SELECT id,name FROM test_user
            </select>
            <!--    There are two ways to paginate queries: 1. Use the pagehelper plugin; 2. Use SQL statements to paginate  -->
            <!-- SQL statement pagination: Oracle mode does not support the limit keyword, and instead uses the unique field 'rownum'-->
            <select id="selectUserByPage" resultType="com.oceanbase.pojo.User">
                select id,name from ( select row_.*, rownum rownum_ from ( select * from test_user ) row_ where rownum
                <![CDATA[ <= ]]>  #{pageNum} * #{pageSize} ) where rownum_ <![CDATA[ >]]>  ( #{pageNum}- 1) * #{pageSize}
            </select>
        </mapper>
    
    package com.oceanbase.mapper;
    
    import com.oceanbase.pojo.App;
    import org.apache.ibatis.annotations.*;
    
    import java.util.List;
    
    //using annotations
    public interface IAppMapper {
        @Insert("insert into test_app(id,name) values(#{id},#{name})")
        Integer insertApp(App app);
    
        @Delete("delete from test_app  where id =#{id}")
        Integer deleteApp(Long id);
    
        @Update("update test_app set name= #{name} where id = #{id}")
        Integer updateApp(App user);
    
        @Select("select * from test_app")
        @Results({
                @Result(id = true, column = "id", property = "id"),
                @Result(column = "name", property = "name")
        })
        List<App> selectApps();
    }
    
    package com.oceanbase.mapper;
    
    import com.oceanbase.pojo.User;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.List;
    
    //using XML
    public interface IUserMapper {
    
        Integer insertUser(User user);
    
    
        Integer deleteUser(Long id);
    
        Integer updateUser(User user);
    
    
        List<User> selectUsers();
    
    
        public List<User> selectUserByPage(@Param("user") User user, @Param("pageNum") Integer pageNum,
                                           @Param("pageSize") Integer pageSize);
    }
    
    package com.oceanbase.pojo;
    
    public class App {
        private Long id;
        private String name;
    
        public App() {
        }
    
        public App(Long id, String name) {
            this.id = id;
            this.name = name;
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "App{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
    
    package com.oceanbase.pojo;
    
    public class User {
        private Long id;
        private String name;
    
        public User() {
        }
    
        public User(Long id, String name) {
            this.id = id;
            this.name = name;
        }
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long 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.mapper.IAppMapper;
    import com.oceanbase.mapper.IUserMapper;
    import com.oceanbase.pojo.App;
    import com.oceanbase.pojo.User;
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.List;
    
    
    public class TestMybatis {
        @Test
        public void testUserMapper() throws SQLException, IOException {
            //mybatis xml usecases
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
            SqlSession sqlSession = sqlSessionFactory.openSession();
            Statement statement = sqlSession.getConnection().createStatement();
            try {
                statement.execute("drop table test_user");
            } catch (SQLException ex) {
            } finally {
                statement.execute("create table test_user(id number(20) primary key,name varchar2(100))");
            }
            IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
            //insert 10 users
            for (int i = 1; i <= 10; i++) {
                User user = new User((long) i, "insert");
                Integer insertResult = mapper.insertUser(user);
            }
            //delete id==1
            Integer deleteResult = mapper.deleteUser(1L);
            //update id==2L name=update
            User updateUser = new User(2L, "update");
            Integer updateResult = mapper.updateUser(updateUser);
            //selectUsers query all
            List<User> userList = mapper.selectUsers();
            userList.forEach(System.out::println);
            //selectUsersByPage:use the rownum keyword in SQL statements to manually perform pagination queries,
            // example: data on page 2 (3 items per page)
            User user = new User();
            user.setName("insert");
            List<User> usersByPage = mapper.selectUserByPage(user, 2, 3);
            System.out.println("usersByPage = " + usersByPage);
            statement.close();
            sqlSession.commit();
            sqlSession.close();
        }
    
        @Test
        public void testSqlSession() throws SQLException, IOException {
            //SqlSession usecases
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
            SqlSession sqlSession = sqlSessionFactory.openSession();
            Statement statement = sqlSession.getConnection().createStatement();
            try {
                statement.execute("drop table test_user");
            } catch (SQLException ex) {
            } finally {
                statement.execute("create table test_user(id number(20) primary key,name varchar2(100))");
            }
            //insert
            for (int i = 1; i <= 10; i++) {
                User user = new User((long) i, "insert");
                //Integer insertResult = mapper.insertUser(user);
                int insertResult = sqlSession.insert("com.oceanbase.mapper.IUserMapper.insertUser", user);
            }
            //delete
            int deleteResult = sqlSession.delete("com.oceanbase.mapper.IUserMapper.deleteUser", 1L);
            //update
            User updateUser = new User(2L, "update");
            int updateResult = sqlSession.update("com.oceanbase.mapper.IUserMapper.updateUser", updateUser);
            //selectUsers
            List<User> userList = sqlSession.selectList("com.oceanbase.mapper.IUserMapper.selectUsers", null);
            userList.forEach(System.out::println);
            //System.out.println("userList = " + userList);
            statement.close();
            sqlSession.commit();
            sqlSession.close();
        }
    
        @Test
        public void testAppMapper() throws SQLException, IOException {
            //mybatis annotation usecases
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
            SqlSession sqlSession = sqlSessionFactory.openSession();
            Statement statement = sqlSession.getConnection().createStatement();
            try {
                statement.execute("drop table test_app");
            } catch (SQLException ex) {
            } finally {
                statement.execute("create table test_app(id number(20) primary key,name varchar2(100))");
            }
    
            IAppMapper mapper = sqlSession.getMapper(IAppMapper.class);
    
            //insert
            for (int i = 1; i <= 10; i++) {
                App app = new App((long) i, "insert" + i);
                Integer insertResult = mapper.insertApp(app);
            }
    
            //delete
            Integer deleteResult = mapper.deleteApp(1L);
            //update
            App updateApp = new App(2L, "update");
            Integer updateResult = mapper.updateApp(updateApp);
            //commit
            sqlSession.commit();
    
            //selectApps
            List<App> appList = mapper.selectApps();
            appList.forEach(System.out::println);
    
            //selectbyPage
            //set page parameters
            PageHelper.startPage(2, 3);
            //selectApps
            List<App> appList1 = mapper.selectApps();
            //get pageList
            PageInfo pageInfo = new PageInfo(appList1);
            List<App> pageList = pageInfo.getList();
            System.out.println("pageList = " + pageList);
    
            sqlSession.close();
        }
    }
    

    関連ドキュメント

    その他のOceanBase Connector/Jに関する情報は、OceanBase JDBCドライバーを参照してください。

    前のトピック

    Hibernate
    最後

    次のトピック

    Jfinal
    次
    このページの内容
    前提条件
    操作手順
    ステップ1:OceanBaseデータベースの接続文字列を取得する
    ステップ2:java-oceanbase-mybatis プロジェクトをIDEAにインポートする
    ステップ3:java-oceanbase-mybatis プロジェクトのデータベース接続情報を修正する
    ステップ4:java-oceanbase-mybatis プロジェクトを実行する
    プロジェクトコードについて
    pom.xmlのコード紹介
    jdbc.propertiesのコード紹介
    mybatis-config.xmlの紹介
    IUserMapper.xmlのコード紹介
    IAppMapper.javaのコード紹介
    IUserMapper.javaのコード紹介
    App.javaのコード紹介
    User.javaのコード紹介
    MyBatisTest.javaファイルの紹介
    全コード表示
    関連ドキュメント