MyBatis で TiDB に接続する
TiDB は MySQL 互換のデータベースであり、 マイバティス人気のあるオープンソースのJava ORM です。
このチュートリアルでは、TiDB と MyBatis を使用して次のタスクを実行する方法を学習します。
- 環境を設定します。
- MyBatis を使用して TiDB クラスターに接続します。
- アプリケーションをビルドして実行します。オプションで、基本的な CRUD 操作用のサンプルコードスニペットを見つけることができます。
注記:
このチュートリアルは、TiDB Serverless、TiDB Dedicated、および TiDB Self-Hosted で機能します。
前提条件
このチュートリアルを完了するには、次のものが必要です。
TiDB クラスターがない場合は、次のように作成できます。
- (推奨) TiDB サーバーレス クラスターの作成に従って、独自のTiDB Cloudクラスターを作成します。
- ローカルテストTiDBクラスタをデプロイまたは本番のTiDBクラスタをデプロイに従ってローカル クラスターを作成します。
サンプルアプリを実行してTiDBに接続する
このセクションでは、サンプル アプリケーション コードを実行して TiDB に接続する方法を示します。
ステップ1: サンプルアプリのリポジトリをクローンする
サンプル コード リポジトリを複製するには、ターミナル ウィンドウで次のコマンドを実行します。
git clone https://github.com/tidb-samples/tidb-java-mybatis-quickstart.git
cd tidb-java-mybatis-quickstart
ステップ2: 接続情報を構成する
選択した TiDB デプロイメント オプションに応じて、TiDB クラスターに接続します。
- TiDB Serverless
- TiDB Dedicated
- TiDB Self-Hosted
クラスターページに移動し、ターゲット クラスターの名前をクリックして概要ページに移動します。
右上隅の「接続」をクリックします。接続ダイアログが表示されます。
接続ダイアログの構成が動作環境と一致していることを確認します。
エンドポイントタイプは
Public
に設定されていますブランチは
main
に設定されています接続先は
General
に設定されていますオペレーティング システムは環境に適合します。
ヒント:
プログラムが Windows Subsystem for Linux (WSL) で実行されている場合は、対応する Linux ディストリビューションに切り替えます。
ランダムなパスワードを作成するには、 「パスワードの生成」をクリックします。
ヒント:
以前にパスワードを作成したことがある場合は、元のパスワードを使用するか、 「パスワードのリセット」をクリックして新しいパスワードを生成することができます。
次のコマンドを実行して
env.sh.example
コピーし、名前をenv.sh
に変更します。cp env.sh.example env.sh対応する接続文字列をコピーして
env.sh
ファイルに貼り付けます。例の結果は次のようになります。export TIDB_HOST='{host}' # e.g. gateway01.ap-northeast-1.prod.aws.tidbcloud.com export TIDB_PORT='4000' export TIDB_USER='{user}' # e.g. xxxxxx.root export TIDB_PASSWORD='{password}' export TIDB_DB_NAME='test' export USE_SSL='true'プレースホルダー
{}
を、接続ダイアログから取得した接続パラメータに必ず置き換えてください。TiDB Serverless では安全な接続が必要です。そのため、
USE_SSL
の値をtrue
に設定する必要があります。env.sh
ファイルを保存します。
クラスターページに移動し、ターゲット クラスターの名前をクリックして概要ページに移動します。
右上隅の「接続」をクリックします。接続ダイアログが表示されます。
「どこからでもアクセスを許可」をクリックし、 「CA 証明書のダウンロード」をクリックして CA 証明書をダウンロードします。
接続文字列を取得する方法の詳細については、 TiDB専用標準接続を参照してください。
次のコマンドを実行して
env.sh.example
コピーし、名前をenv.sh
に変更します。cp env.sh.example env.sh対応する接続文字列をコピーして
env.sh
ファイルに貼り付けます。例の結果は次のようになります。export TIDB_HOST='{host}' # e.g. tidb.xxxx.clusters.tidb-cloud.com export TIDB_PORT='4000' export TIDB_USER='{user}' # e.g. root export TIDB_PASSWORD='{password}' export TIDB_DB_NAME='test' export USE_SSL='false'プレースホルダー
{}
を、接続ダイアログから取得した接続パラメータに必ず置き換えてください。env.sh
ファイルを保存します。
次のコマンドを実行して
env.sh.example
コピーし、名前をenv.sh
に変更します。cp env.sh.example env.sh対応する接続文字列をコピーして
env.sh
ファイルに貼り付けます。例の結果は次のようになります。export TIDB_HOST='{host}' export TIDB_PORT='4000' export TIDB_USER='root' export TIDB_PASSWORD='{password}' export TIDB_DB_NAME='test' export USE_SSL='false'プレースホルダー
{}
を接続パラメータに置き換え、USE_SSL
をfalse
に設定してください。TiDB をローカルで実行している場合、デフォルトのホスト アドレスは127.0.0.1
で、パスワードは空です。env.sh
ファイルを保存します。
ステップ3: コードを実行して結果を確認する
サンプル コードを実行するには、次のコマンドを実行します。
make予想される出力.txtをチェックして、出力が一致するかどうかを確認します。
サンプルコードスニペット
次のサンプル コード スニペットを参照して、独自のアプリケーション開発を完了することができます。
完全なサンプル コードとその実行方法については、 tidb サンプル/tidb-java-mybatis-クイックスタートリポジトリを参照してください。
TiDBに接続する
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>
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="aggressiveLazyLoading" value="true"/>
<setting name="logImpl" value="LOG4J"/>
</settings>
<environments default="development">
<environment id="development">
<!-- JDBC transaction manager -->
<transactionManager type="JDBC"/>
<!-- Database pool -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="${tidb_jdbc_url}"/>
<property name="username" value="${tidb_user}"/>
<property name="password" value="${tidb_password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="${mapper_location}.xml"/>
</mappers>
</configuration>
${tidb_jdbc_url}
${tidb_password}
必ず TiDB クラスターの実際の値に置き換えてください。また、 ${mapper_location}
マッパー XML 構成ファイルのパスに置き換えてください。マッパー XML 構成ファイルが${tidb_user}
ある場合は、それぞれに<mapper/>
タグを追加する必要があります。次に、次の関数を定義します。
public SqlSessionFactory getSessionFactory() {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
データを挿入
マッパー XML にノードを追加し、XML 構成ファイルのmapper.namespace
属性で構成されたインターフェイス クラスに同じ名前の関数を追加します。
<?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.pingcap.model.PlayerMapper">
<insert id="insert" parameterType="com.pingcap.model.Player">
insert into player (id, coins, goods)
values (#{id,jdbcType=VARCHAR}, #{coins,jdbcType=INTEGER}, #{goods,jdbcType=INTEGER})
</insert>
</mapper>
詳細についてはデータを挿入を参照してください。
クエリデータ
マッパー XML にノードを追加し、XML 構成ファイルのmapper.namespace
属性で構成されたインターフェース クラスに同じ名前の関数を追加します。具体的には、MyBatis クエリ関数の戻り値の型としてresultMap
を使用する場合は、 <resultMap/>
ノードが正しく構成されていることを確認してください。
<?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.pingcap.model.PlayerMapper">
<resultMap id="BaseResultMap" type="com.pingcap.model.Player">
<constructor>
<idArg column="id" javaType="java.lang.String" jdbcType="VARCHAR" />
<arg column="coins" javaType="java.lang.Integer" jdbcType="INTEGER" />
<arg column="goods" javaType="java.lang.Integer" jdbcType="INTEGER" />
</constructor>
</resultMap>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select id, coins, goods
from player
where id = #{id,jdbcType=VARCHAR}
</select>
</mapper>
詳細についてはクエリデータを参照してください。
データの更新
マッパー XML にノードを追加し、XML 構成ファイルのmapper.namespace
属性で構成されたインターフェイス クラスに同じ名前の関数を追加します。
<?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.pingcap.model.PlayerMapper">
<update id="updateByPrimaryKey" parameterType="com.pingcap.model.Player">
update player
set coins = #{coins,jdbcType=INTEGER},
goods = #{goods,jdbcType=INTEGER}
where id = #{id,jdbcType=VARCHAR}
</update>
</mapper>
詳細についてはデータの更新を参照してください。
データを削除する
マッパー XML にノードを追加し、XML 構成ファイルのmapper.namespace
属性で構成されたインターフェイス クラスに同じ名前の関数を追加します。
<?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.pingcap.model.PlayerMapper">
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
delete from player
where id = #{id,jdbcType=VARCHAR}
</delete>
</mapper>
詳細についてはデータを削除するを参照してください。
次のステップ
- MyBatis の使い方をMyBatisのドキュメントから詳しく学びます。
- 開発者ガイドのデータを挿入 、 データの更新 、 データを削除する 、 単一テーブル読み取り 、 取引 、 SQLパフォーマンスの最適化などの章で、 TiDB アプリケーション開発のベスト プラクティスを学習します。
- プロフェッショナルTiDB 開発者コースを通じて学び、試験に合格するとTiDB 認定獲得します。
- Java開発者向けコースを通じて学習します: Javaから TiDB を操作する .
助けが必要?
不和 、またはサポートチケットを作成するについて質問します。