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 フィールドのマッピング
-
データテーブルの列に対応する 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; } } -
マッピング設定ファイルを作成し、クエリ条件を定義します。次の内容の 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 セッションを作成します。
-
次の内容で 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 シークレットです。
-
MyBatis 設定ファイルを読み込み、SqlSessionFactory を構築します。
String resource = "mybatis/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
ステップ5:SqlSession を使用したデータクエリ
Tablestore はトランザクションをサポートしていないため、openSession の 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();
完全なコード例
次の例では、プライマリキーの値が 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();
}
}