すべてのプロダクト
Search
ドキュメントセンター

Tablestore:MyBatis を使用した SQL データクエリ

最終更新日:Jun 06, 2026

Java の永続化フレームワークである MyBatis と Tablestore JDBC ドライバーを統合し、Java プロジェクトで Tablestore の SQL クエリを実行します。詳細については、「MyBatis」をご参照ください。

前提条件

  • "Action": "ots:SQL*" 権限を持つ RAM ユーザーの AccessKey ペア

  • データテーブルとマッピングテーブル (「DDL 操作」をご参照ください)

手順

MyBatis と Tablestore JDBC ドライバーを統合するには、次の手順を実行します。

重要

Tablestore JDBC ドライバーには、組み込みの接続プーリングが含まれています。互換性の問題を回避するために、外部の接続プールツールは使用しないでください。

ステップ1:JDBC ドライバーのインストール

JDBC ドライバーは、Maven または手動でインストールします。

Maven 依存関係の追加

Maven プロジェクトで Tablestore JDBC ドライバーを使用するには、次の依存関係を pom.xml ファイルの <dependencies> 要素に追加します。この例では、バージョン 5.17.0 を使用します。

<dependency>
  <groupId>com.aliyun.openservices</groupId>
  <artifactId>tablestore-jdbc</artifactId>
  <version>5.17.0</version>
</dependency>

手動インストール

Tablestore JDBC ドライバーをダウンロードし、プロジェクトにインポートします。

ステップ2:MyBatis のインストール

MyBatis は、Maven または手動でインストールします。

Maven 依存関係の追加

Maven プロジェクトで MyBatis を使用するには、次の依存関係を pom.xml ファイルの <dependencies> 要素に追加します。この例では、バージョン 3.5.9 を使用します。

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.9</version>
</dependency>

手動インストール

MyBatis パッケージをダウンロードし、プロジェクトにインポートします。

ステップ3:SQL フィールドのマッピング

  1. データテーブルの列に対応する Java Bean を作成します。この例では、trip_id はデータテーブルのプライマリキーです。

    重要

    Java Bean のメンバー変数名は、データテーブルの列名と一致させる必要があります。

    package mybatis;
    
    public class Trip {
    
        private long trip_id;
        private long duration;
        private String start_date;
        private String end_date;
        private long start_station_number;
        private long end_station_number;
        private String start_station;
        private String end_station;
        private String bike_number;
        private String member_type;
    
        // 次の例では trip_id を使用します。他のフィールドも同じパターンに従います。
        public void setTrip_Id(Long trip_id){
            this.trip_id = trip_id;
        }
        public Long getTrip_Id() {
            return trip_id;
        }
    }
  2. マッピング設定ファイルを作成し、クエリ条件を定義します。次の内容の TripMapper.xml を mybatis ディレクトリに作成します。

    <?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="mybatis.TripMapper">
        <select id="selectTrip" resultType="mybatis.Trip">
            select * from trips where trip_id = #{id}
        </select>
    </mapper>

ステップ4:SqlSessionFactory の構築

SqlSessionFactory は、Tablestore に接続する MyBatis セッションを作成します。

  1. 次の内容で MyBatis 設定ファイル mybatis-config.xml を作成します。プレースホルダーは実際の値に置き換えてください。

    <?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>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <!-- Tablestore JDBC ドライバーは、明示的にクローズしないとプロセスが終了しません。長時間実行されるアプリケーションには POOLED を、一度きりのクエリには UNPOOLED を使用してください。 -->
                <dataSource type="UNPOOLED">
                    <property name="driver" value="com.alicloud.openservices.tablestore.jdbc.OTSDriver"/>
                    <property name="url" value="jdbc:ots:https://myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance"/>
                    <property name="username" value="***********************"/>
                    <property name="password" value="********************************"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <!-- マッピング設定ファイルのパスに設定します。 -->
            <mapper resource="mybatis/TripMapper.xml"/>
        </mappers>
    </configuration>

    パラメーター

    タイプ

    必須

    説明

    driver

    class

    はい

    Tablestore JDBC ドライバーのクラス名です。これを com.alicloud.openservices.tablestore.jdbc.OTSDriver に設定します。

    url

    string

    はい

    インスタンスエンドポイントを jdbc:ots:endpoint/instanceName の形式で指定します。endpoint をインスタンスのサービスアドレスに、instanceName をインスタンス名に置き換えます。

    username

    string

    はい

    Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID です。

    password

    string

    はい

    Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey シークレットです。

  2. MyBatis 設定ファイルを読み込み、SqlSessionFactory を構築します。

    String resource = "mybatis/mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

ステップ5:SqlSession を使用したデータクエリ

Tablestore はトランザクションをサポートしていないため、openSessionautoCommit パラメーターを true に設定します。

SqlSession session = sqlSessionFactory.openSession(true);
Trip trip = (Trip) session.selectOne("mybatis.TripMapper.selectTrip", 99L);
System.out.println("trip id: " + trip.getTrip_Id());
System.out.println("start date: " + trip.getStart_date());
System.out.println("end date: " + trip.getEnd_date());
System.out.println("duration: " + trip.getDuration());
session.close();

完全なコード例

次の例では、プライマリキーの値が 99 の行をクエリし、特定の列の値を取得します。

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 mybatis.Trip;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisDemo {
    public static void main(String[] args) throws IOException {
        String resource = "mybatis/mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // Tablestore はトランザクションをサポートしていないため、autoCommit を true に設定します。
        SqlSession session = sqlSessionFactory.openSession(true);
        Trip trip = (Trip) session.selectOne("mybatis.TripMapper.selectTrip", 99L);
        System.out.println("trip id: " + trip.getTrip_Id());
        System.out.println("start date: " + trip.getStart_date());
        System.out.println("end date: " + trip.getEnd_date());
        System.out.println("duration: " + trip.getDuration());
        session.close();
    }
}