MyBatisは、カスタムSQLステートメント、ストアドプロシージャ、および高度なマッピングをサポートするJavaの永続性フレームワークです。MyBatisを使用して、Tablestore用のJava Database Connectivity(JDBC)ドライバを使用してTablestoreにアクセスできます。
背景情報
MyBatisは、カスタムSQLステートメント、ストアドプロシージャ、および高度なマッピングをサポートするJavaの永続性フレームワークです。MyBatisを使用すると、JDBCコードを使用したり、パラメータを手動で設定したり、結果セットを取得したりする必要がなくなります。詳細については、MyBatisドキュメントを参照してください。
注意事項
SQLクエリ機能は、中国(杭州)、中国(上海)、中国(北京)、中国(張家口)、中国(ウランチャブ)、中国(深セン)、中国(成都)、中国(香港)、日本(東京)、シンガポール、マレーシア(クアラルンプール)、英国(ロンドン)、米国(シリコンバレー)、インドネシア(ジャカルタ)、ドイツ(フランクフルト)、SAU(リヤド - パートナーリージョン)、および米国(バージニア)の各リージョンでご利用いただけます。
Tablestore用JDBCドライバには、組み込みの接続プールがあります。そのため、非互換性やその他の不明な要因によって発生する問題を防ぐために、外部データベースの接続プールを使用しないことをお勧めします。
前提条件
RAMユーザーとしてデータをクエリする場合、RAMユーザーが作成され、すべてのSQL操作権限がRAMユーザーに付与されます。RAMユーザーにアタッチされたカスタムポリシーで
"Action": "ots:SQL*"
を設定することで、すべてのSQL操作権限をRAMユーザーに付与できます。詳細については、RAMポリシーを使用してRAMユーザーに権限を付与するを参照してください。AccessKey IDとAccessKeyシークレットで構成されるAccessKeyペアを取得します。詳細については、AccessKeyペアを作成するを参照してください。
データテーブルを作成し、データテーブルのマッピングテーブルを作成します。詳細については、手順3:データテーブルを作成するおよびテーブルのマッピングテーブルを作成するを参照してください。
手順
手順1:JDBCドライバをインストールする
JDBCドライバは、次のいずれかの方法でインストールできます。
Tablestore用JDBCドライバをダウンロードし、プロジェクトにインポートします。ダウンロードパスについては、Tablestore用JDBCドライバを参照してください。
Mavenプロジェクトに依存関係を追加します。
MavenでTablestore用JDBCドライバを使用するには、対応する依存関係をpom.xmlファイルに追加するだけです。この例では、JDBCドライバ5.17.0を使用しています。<dependencies>に次のコンテンツを追加します。
<dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>tablestore-jdbc</artifactId> <version>5.17.0</version></dependency>
手順2:MyBatisをインストールする
MyBatisは、次のいずれかの方法でインストールできます。
MyBatisインストールパッケージmybatis-x.x.x.jarをダウンロードし、プロジェクトにインポートします。ダウンロードパスについては、MyBatisインストールパッケージを参照してください。
mybatis-x.x.x.jarでは、
x.x.x
はMyBatisのバージョン番号を示します。ビジネス要件に基づいてMyBatisインストールパッケージを選択してください。Mavenプロジェクトに依存関係を追加します。
MavenでMyBatisを使用するには、対応する依存関係をpom.xmlファイルに追加するだけです。この例では、Java V3.5.9用Tablestore SDKを使用しています。<dependencies>に次のコンテンツを追加します。
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency>
手順3:SQLフィールドをマッピングする
データテーブルのフィールド名と同じ名前のメンバー変数を含むJava Beanを作成します。この例では、trip_idはデータテーブルの唯一のプライマリキー列です。
重要Java Beanを作成するときは、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; } }
クエリ条件が定義されているマッピング設定ファイルを作成します。次のサンプルコードは、mybatisディレクトリにTripMapper.xmlという名前のマッピング設定ファイルを作成する方法を示しています。
サポートされているSQL機能については、SQL機能を参照してください。
<?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は、MyBatisセッションを作成するために使用されます。MyBatisセッションを使用して、クライアントをTablestoreに接続できます。
mybatis-config.xmlという名前のMyBatis設定ファイルに次のコンテンツを追加します。ビジネス要件に基づいて、設定ファイルの設定項目を変更します。
<?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>
次の表は、MyBatis設定ファイルで設定する必要がある項目について説明しています。
設定項目
タイプ
必須
例
説明
driver
class
はい
com.alicloud.openservices.tablestore.jdbc.OTSDriver
Tablestore用JDBCドライバのクラスの名前。この設定項目をcom.alicloud.openservices.tablestore.jdbc.OTSDriverに設定します。
url
string
はい
jdbc:ots:https://myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance
インスタンスのエンドポイント。値は
jdbc:ots:endpoint/instanceName
の形式である必要があります。endpointはインスタンスのエンドポイントを示します。詳細については、エンドポイントを参照してください。instanceNameはインスタンスの名前を示します。instanceNameを実際のインスタンス名に置き換えます。この設定項目の値を指定するときは、値に
jdbc:ots:
プレフィックスを含める必要があります。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を作成してデータをクエリする
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 {
// MyBatis設定ファイルのパスを指定します。
String resource = "mybatis/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// Tablestoreはトランザクションをサポートしていません。そのため、設定を自動的にコミットするかどうかを指定するパラメータをtrueに設定する必要があります。
SqlSession session = sqlSessionFactory.openSession(true);
// 実行するSELECTステートメントの識別子を入力し、プライマリキーの値を99に設定します。
// SELECTステートメントの識別子は、マッピング設定ファイルのパス.実行するSELECTステートメントのIDの形式である必要があります。この例では、mybatis.TripMapper.selectTripは、mybatisノードのTripMapper.xmlファイルでIDがselectTripであるSELECTステートメントが実行されることを示しています。
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();
}
}
関連情報
Java Database Connectivity(JDBC)を使用するか、Hibernateを使用してTablestore用JDBCドライバを使用することで、Tablestoreにアクセスできます。詳細については、Hibernateを使用してSQLステートメントを実行してデータをクエリするおよびJDBCを使用してTablestoreにアクセスするを参照してください。
Tablestoreコンソール、Tablestore CLI、Tablestore SDK、またはGo用Tablestoreドライバを使用して、Tablestoreにアクセスできます。詳細については、TablestoreコンソールでSQLクエリ機能を使用する、Tablestore CLIでSQLクエリ機能を使用する、Tablestore SDKを使用してSQLクエリ機能を使用する、およびGo用Tablestoreドライバを使用してSQLステートメントを実行してデータをクエリするを参照してください。
TablestoreインスタンスをDataWorksまたはData Management(DMS)に接続し、SQLステートメントを実行してTablestoreデータをクエリおよび分析することもできます。詳細については、TablestoreインスタンスをDataWorksに接続するおよびTablestoreをDMSに接続するを参照してください。
SQLステートメントを実行することでデータクエリと計算を高速化するには、セカンダリインデックスまたは検索インデックスを作成できます。詳細については、インデックス選択ポリシーおよび計算プッシュダウンを参照してください。
MaxCompute、Spark、Hive、HadoopMR、Function Compute、Flink、PrestoDBなどの計算エンジンを使用して、テーブル内のデータを計算および分析することもできます。詳細については、概要を参照してください。
データを視覚化するには、Grafanaを使用できます。たとえば、Grafanaを使用してTablestoreデータをグラフに表示できます。詳細については、TablestoreをGrafanaに接続するを参照してください。