本ドキュメントでは、SpringBootフレームワークとOceanBase Cloudデータベースを使用してアプリケーションを構築し、テーブルの作成、データの挿入、データのクエリなどの基本操作を実装する方法について説明します。
前提条件
- OceanBase Cloudデータベースのアカウントを登録し、クラスタインスタンスとMySQL互換モードのテナントを作成していること。詳細は、クラスタインスタンスの作成 およびテナントの作成をご参照ください。
- JDK 1.8およびMavenをインストールしていること。
- IntelliJ IDEAをインストールしていること。
説明
本ドキュメントでコードを実行するために使用しているツールはIntelliJ IDEA 2021.3.2 (Community Edition)ですが、お好みに合わせて適切なツールを選択してサンプルコードを実行することもできます。
操作手順
説明
本ドキュメントに記載されている手順は、Windows環境に基づいています。他のオペレーティングシステム環境やコンパイラを使用している場合、手順が若干異なる場合があります。
- OceanBase Cloudデータベースの接続情報を取得します。
java-oceanbase-springbootプロジェクトをIDEAにインポートします。java-oceanbase-springbootプロジェクト内のデータベース接続情報を変更します。java-oceanbase-springbootプロジェクトを実行します。
操作手順1:OceanBase Cloudデータベースの接続情報の取得
OB Cloudクラウドデータベースコンソールにログインします。インスタンス一覧ページで対象インスタンスの情報を展開し、対象テナントの下で 接続 > 接続文字列を取得 を選択します。
詳細な操作については、接続文字列の取得をご参照ください。
作成済みのOceanBase Cloudデータベースに基づいて、以下のURLに対応する情報を入力します。
説明
application.propertiesファイルでこのURL情報が必要になります。jdbc:oceanbase://host:port/schema_name?user=$user_name&password=$password&useSSL=false&useUnicode=true&characterEncoding=utf-8パラメータの説明:
host:OceanBase Cloudデータベースの接続アドレスを指定します。例:t********.********.oceanbase.cloud。port:OceanBase Cloudデータベースの接続ポートを指定します。デフォルトは3306です。schema_name:アクセスするSchema名を指定します。user_name:データベースにアクセスするアカウントを指定します。password:アカウントのパスワードを指定します。useSSL=false&useUnicode=true&characterEncoding=utf-8:追加の接続属性です。useSSL:接続時にSSL/TLSを強制的に使用するかどうかを指定します。デフォルト値:false。useUnicode:文字のエンコードおよびデコード形式を指定します。デフォルト値:true。characterEncoding:データベースURLオプションでサポートされる文字エンコーディングを指定します。デフォルト値:utf8。
URLパラメータの詳細については、データベースURLをご参照ください。
操作手順2:java-oceanbase-springboot プロジェクトのIDEAへのインポート
IntelliJ IDEA を開き、File > Open... オプションを選択します。
ポップアップ表示される Open File or Project ウィンドウで、対応するプロジェクトファイルを選択し、OK をクリックしてプロジェクトファイルのインポートを完了します。
IntelliJ IDEAはプロジェクト内の各種ファイルを自動的に認識し、Project ツールウィンドウでプロジェクトのディレクトリ構造、ファイルリスト、モジュールリスト、依存関係などの情報を確認できます。Project ツールウィンドウは通常、IntelliJ IDEAインターフェースの左端にあり、デフォルトで開いています。Project ツールウィンドウが閉じている場合は、メニューバーの View > Tool Windows > Project をクリックするか、ショートカットキー Alt + 1 を使用して再度開くことができます。
説明
IntelliJ IDEAを使用してプロジェクトをインポートすると、IntelliJ IDEAはプロジェクト内のpom.xmlファイルを自動的に検出し、ファイルに記述された依存関係に基づいて必要な依存ライブラリを自動的にダウンロードしてプロジェクトに追加します。
プロジェクトの状況を確認します。
操作手順3:java-oceanbase-springboot プロジェクト内のデータベース接続情報の変更
手順1:OceanBase Cloudデータベースの接続情報の取得 の情報に基づいて、application.properties ファイル内のデータベース接続情報を変更します。
例:
- データベースドライバ名:
com.mysql.cj.jdbc.Driver - OceanBase Cloudデータベースの接続アドレス:
t5******.********.oceanbase.cloud - アクセスポート:3306
- アクセスするSchema名:
test - テナントの接続アカウント:
mysql001 - パスワード:
******
サンプルコードは以下の通りです:
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:oceanbase://t5******.********.oceanbase.cloud:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=mysql001
spring.datasource.password=******
操作手順4:java-oceanbase-springboot プロジェクトの実行
実行パス
- プロジェクト構造の src > test > java から
TestSpringbootApplicationTests.javaファイルを見つけます。 - ツールメニューバーで Run > Run > TestSpringbootApplicationTests を選択するか、右上の緑色の三角形を直接クリックして実行します。
- IDEAのコンソールからプロジェクトのログ情報と出力結果を確認します。
実行結果
test_springboot delete successfully!
test_springboot create successfully!
user = User{id=2, name='update'}
User{id=2, name='update'}
User{id=3, name='insert3'}
User{id=4, name='insert4'}
User{id=5, name='insert5'}
User{id=6, name='insert6'}
User{id=7, name='insert7'}
User{id=8, name='insert8'}
User{id=9, name='insert9'}
User{id=10, name='insert10'}
よくある質問
1. 接続タイムアウト
接続タイムアウトの問題が発生した場合は、JDBC URLで接続タイムアウトパラメータを設定できます:
jdbc:mysql://host:port/database?connectTimeout=30000&socketTimeout=60000
2. 文字セットの問題
正しい文字エンコーディングを確保するために、JDBC URLで正しい文字セットパラメータを設定します:
jdbc:mysql://host:port/database?characterEncoding=utf8&useUnicode=true
3. SSL接続
OceanBase CloudデータベースとのSSL接続を有効にするには、JDBC URLに以下のパラメータを追加します:
jdbc:mysql://host:port/database?useSSL=true&requireSSL=true
4. アカウントパスワード内の特殊文字
ユーザー名またはパスワードに特殊文字(#など)が含まれている場合は、URLエンコードを行う必要があります:
String encodedPassword = URLEncoder.encode(password, "UTF-8");
注意
MySQL Connector/J 8.xを使用する場合、アカウントパスワードにハッシュ記号(#)が含まれていないことを確認してください。含まれていると、接続エラーが発生する可能性があります。
プロジェクトコードの紹介
java-oceanbase-springboot をクリックしてプロジェクトコードをダウンロードします。これは java-oceanbase-springboot という名前の圧縮パッケージです。
解凍すると、java-oceanbase-springboot という名前のフォルダが作成されます。ディレクトリ構造は以下の通りです:
│--pom.xml
│
├─.idea
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─oceanbase
│ │ │ └─testspringboot
│ │ │ │--TestSpringbootApplication.java
│ │ │ │
│ │ │ ├─dao
│ │ │ │ │--UserDao.java
│ │ │ │ │
│ │ │ │ └─impl
│ │ │ │ └─--UserDaoImpl.java
│ │ │ │
│ │ │ └─entity
│ │ │ └─--User.java
│ │ │
│ │ └─resources
│ │ └─--application.properties
│ │
│ └─test
│ └─java
│ └─com
│ └─oceanbase
│ └─testspringboot
│ └─--TestSpringbootApplicationTests.java
│
└─target
ファイルの説明:
pom.xml:Mavenプロジェクトの設定ファイルであり、プロジェクトの依存関係、プラグイン、ビルドなどの情報が含まれています。.idea:IDE(統合開発環境)で使用されるディレクトリであり、プロジェクト関連の設定情報を保存するために使用されます。src:通常、プロジェクト内でソースコードを格納するディレクトリを表すために使用されます。main: 主要なソースコードとリソースファイルを格納するディレクトリです。java: Javaソースコードを格納するディレクトリです。com: Javaパッケージのルートディレクトリを格納します。oceanbase: プロジェクトのルートディレクトリを格納します。testspringboot:Javaパッケージのルートディレクトリであり、プロジェクトのすべてのJavaクラスが含まれています。TestSpringbootApplication.java:プロジェクトのメインクラスであり、mainメソッドが含まれています。dao: データアクセスオブジェクト(Data Access Object)パッケージを格納し、データベースやその他のデータストレージサービスへのアクセスに使用されます。UserDao.java:ユーザーデータアクセスオブジェクトであり、ユーザーデータの追加、削除、変更、クエリなどの操作に使用されます。impl:DAOインターフェースの実装ディレクトリです。UserDaoImpl.java:ユーザーDAOインターフェースの実装クラスです。entity:エンティティクラスのディレクトリであり、データベーステーブルに対応するJavaクラスを格納するために使用されます。User.java:ユーザー永続化オブジェクトであり、ユーザーデータテーブルのフィールドをマッピングするために使用されます。resources: 設定ファイルやSQLファイルなどのリソースファイルを格納するディレクトリです。application.properties:プロジェクトの設定ファイルであり、アプリケーションのプロパティとパラメータを設定するために使用されます。test: テストコードとリソースファイルを格納するディレクトリです。TestSpringbootApplicationTests.java: springbootをテストするJavaクラスを格納します。target: コンパイル後のClassファイル、Jarパッケージなどのファイルを格納するディレクトリです。
pom.xml コードの紹介
説明
サンプルを検証するだけの場合は、デフォルトのコードを使用し、変更する必要はありません。以下の説明に従って、要件に合わせて pom.xml ファイルを変更することもできます。
pom.xml 設定ファイルの内容は以下の通りです:
- ファイル宣言文。
このファイルがXMLファイルであることを宣言し、使用するXMLバージョンは 1.0、文字エンコーディング方式は UTF-8 です。
コードは以下の通りです:
```xml
<?xml version="1.0" encoding="UTF-8"?>
```
POMの名前空間とPOMモデルのバージョンを設定します。
xmlnsを使用して、POMの名前空間をhttp://maven.apache.org/POM/4.0.0に指定します。xmlns:xsiを使用して、XML名前空間をhttp://www.w3.org/2001/XMLSchema-instanceに指定します。xsi:schemaLocationを使用して、POMの名前空間をhttp://maven.apache.org/POM/4.0.0に指定し、POMのXSDファイルの場所をhttps://maven.apache.org/xsd/maven-4.0.0.xsdに指定します。<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
</project>
親プロジェクトの情報を設定します。
<groupId>を使用して、親プロジェクトの識別子をorg.springframework.bootに指定します。<artifactId>を使用して、親プロジェクトの依存関係をspring-boot-starter-parentに指定します。<version>を使用して、親プロジェクトのバージョン番号を2.7.11に指定します。relativePathを使用して、親プロジェクトのパスが空であることを示します。
コードは以下の通りです:
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.11</version>
<relativePath/>
基本情報を設定します。
<groupId>を使用して、プロジェクトの識別子をcom.oceanbaseに指定します。<artifactId>を使用して、プロジェクトの依存関係をjava-oceanbase-springbootに指定します。<version>を使用して、プロジェクトのバージョン番号を0.0.1-SNAPSHOTに指定します。descriptionを使用して、プロジェクト情報をDemo project for Spring Bootとして紹介します。
コードは以下の通りです:
<groupId>com.oceanbase</groupId>
<artifactId>java-oceanbase-springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>java-oceanbase-springboot</name>
<description>Demo project for Spring Boot</description>
- Javaバージョンを設定します。
プロジェクトで使用するJavaバージョンを1.8に指定します。
コードは以下の通りです:
```xml
<properties>
<java.version>1.8</java.version>
</properties>
```
コア依存関係を設定します。
依存関係が属する組織を
org.springframework.boot、名前をspring-boot-starterに指定します。この依存ライブラリには、Spring Bootがデフォルトでサポートするコンポーネントの依存関係が含まれており、Web、データ処理、セキュリティ、Testなどの機能をサポートします。
コードは以下の通りです:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
```
- 依存関係が属する組織を
org.springframework.boot、名前をspring-boot-starter-jdbcに指定します。この依存関係により、接続プールやデータソース設定など、Spring Bootが提供するJDBC関連機能を使用できます。
コードは以下の通りです:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
```
- 依存関係が属する組織を
org.springframework.boot、名前をspring-boot-starter-test、スコープをtestに指定します。この依存関係により、JUnit、Mockito、Hamcrestなど、Spring Bootが提供するテストフレームワークとツールを使用できます。
コードは以下の通りです:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
- 依存関係が属する組織を
com.oceanbase、名前をoceanbase-client、バージョン番号を2.4.3に指定します。この依存関係により、接続、クエリ、トランザクションなど、OceanBaseが提供するクライアント機能を使用できます。
コードは以下の通りです:
```xml
<dependencies>
<dependency>
<groupId>com.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId>
<version>2.4.3</version>
</dependency>
</dependencies>
```
- Mavenプラグインを設定します。
依存関係が属する組織を org.springframework.boot、名前を spring-boot-maven-plugin に指定します。このプラグインは、Spring Bootアプリケーションを実行可能なJARパッケージまたはWARパッケージにパッケージ化し、直接実行できるようにするために使用されます。
コードは以下の通りです:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
application.properties コードの紹介
application.properties ファイルは、Spring Bootアプリケーションのデータソースを設定し、OceanBase Cloudデータベースへの接続に必要なドライバクラス名、URL、ユーザー名、パスワードを指定します。これらの設定により、アプリケーションはOceanBase Cloudデータベースに接続して操作できます。
spring.datasource.driverClassNameを使用して、データベースドライバをcom.oceanbase.jdbc.Driverに指定し、OceanBase Cloudデータベースとの接続を確立するために使用します。spring.datasource.urlを使用して、データベースに接続するURLを指定します。spring.datasource.usernameを使用して、データベースに接続するユーザー名を指定します。spring.datasource.passwordを使用して、データベースに接続するパスワードを指定します。
コードは以下の通りです:
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:oceanbase://host:port/schema_name?useSSL=false&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=user_name
spring.datasource.password=******
UserDaoImpl.java ファイルの紹介
UserDaoImpl.java ファイルは、JdbcTemplate オブジェクトを使用してSQL文を実行し、Userテーブルに対する挿入、削除、更新、クエリ操作を実装します。
UserDaoImpl.java ファイルのコードは、主に以下の要素で構成されています:
- 他のクラスとインターフェースの参照。
現在のファイルが属するパッケージ名を com.oceanbase.testspringboot.dao.impl として宣言し、以下のインターフェースとクラスを含みます:
* `UserDao` インターフェース:UserDaoインターフェースで定義されたメソッドを実装するために使用されます。
* `User` クラス:ユーザーデータの受け渡しと保存に使用されます。
Autowiredアノテーション:JdbcTemplateオブジェクトをこのクラスに注入し、SQL文の実行に使用します。BeanPropertyRowMapperクラス:データベースのクエリ結果をJavaオブジェクトにマッピングするために使用されます。JdbcTemplateクラス:SQL文の実行とデータベースアクセスの処理に使用されます。Repositoryアノテーション:データアクセスに使用されるSpringのリポジトリコンポーネントをマークします。Listインターフェース:クエリ結果セットの操作に使用されます。
コードは以下の通りです:
```java
import com.oceanbase.testspringboot.dao.UserDao;
import com.oceanbase.testspringboot.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
```
UserDaoImplクラスの定義。
Repository アノテーションを使用してこのクラスの Bean 名を userDao に指定し、JdbcTemplate オブジェクトを使用してSQL文を実行することで、User テーブルに対する挿入、削除、更新、クエリ操作を実装します。
- ユーザー情報の挿入。
JdbcTemplate オブジェクトの insert メソッドを呼び出すことで、ユーザーのIDと名前をデータベース内の test_springboot テーブルに挿入し、挿入操作の結果に基づいて対応するブール値を返します。
コードは以下の通りです:
```java
@Autowired
private JdbcTemplate jdbcTemplate; //Jdbc connection tool class
@Override
public boolean insertUser(User user) {
String sql = "insert into test_springboot(id,name)values(?,?)";
Object[] params = {user.getId(), user.getName()};
return jdbcTemplate.update(sql, params) > 0;
}
```
- ユーザー情報の削除。
JdbcTemplate オブジェクトの delete メソッドを呼び出すことで、ユーザーのIDに基づいてデータベース内のユーザー情報を削除し、削除操作の結果に基づいて対応するブール値を返します。
コードは以下の通りです:
```java
@Override
public boolean deleteById(Long id) { String sql = "delete from test_springboot where id=?"; Object[] params = {id}; return jdbcTemplate.update(sql, params) > 0; } ```
- ユーザー情報の更新。
JdbcTemplate オブジェクトの update メソッドを呼び出すことで、ユーザーの名前をデータベース内の test_springboot テーブルの指定されたIDのレコードに更新し、更新操作の結果に基づいて対応するブール値を返します。
コードは以下の通りです:
```java
@Override
public boolean updateUser(User user) { String sql = "update test_springboot set name=? where id=?"; Object[] params = {user.getName(), user.getId()}; return jdbcTemplate.update(sql, params) > 0; } ```
- ユーザー情報のクエリ。
JdbcTemplate オブジェクトを使用してSQLクエリ文を実行し、test_springboot という名前のテーブルから指定されたIDのユーザーレコードをクエリし、BeanPropertyRowMapper を使用して結果をマッピングします。クエリ結果オブジェクトを返します。
コードは以下の通りです:
```java
@Override
public User selectUserById(Long id) { String sql = "select * from test_springboot where id=?"; Object[] params = new Object[]{id}; return jdbcTemplate.queryForObject( sql, params, new BeanPropertyRowMapper<>(User.class)); } ```
- すべてのユーザー情報のクエリ。
JdbcTemplate オブジェクトの query メソッドを呼び出すことで、データベース内のすべてのユーザー情報をクエリし、クエリ結果をUser型のオブジェクトリストにマッピングして返します。
コードは以下の通りです:
```java
@Override
public List
UserDao.java ファイルの紹介
UserDao.java ファイルは、UserDaoインターフェースを通じてユーザーデータに対する操作メソッドを定義するために使用されます。
UserDao.java ファイルのコードは、主に以下の要素で構成されています:
- 他のクラスとインターフェースの参照。
現在のファイルが属するパッケージ名を package com.oceanbase.testspringboot.dao として宣言し、以下のインターフェースとクラスを含みます:
* `User` クラス:ユーザーデータの受け渡しと保存に使用されます。
* `List` インターフェース:クエリ結果セットの操作に使用されます。
コードは以下の通りです:
```java
import com.oceanbase.testspringboot.entity.User;
import java.util.List;
```
UserDaoインターフェースの定義。
UserDao インターフェースを使用して、ユーザーデータに対する操作メソッドを定義します。これには、ユーザー情報の挿入、ユーザー情報の削除、ユーザー情報の更新、ユーザーIDに基づくユーザー情報のクエリ、およびすべてのユーザー情報のクエリなどのメソッドが含まれます。
コードは以下の通りです:
```java
public interface UserDao {
boolean insertUser(User user);
boolean deleteById(Long id);
boolean updateUser(User user);
User selectUserById(Long id);
List<User> selectAllUsers();
}
```
User.java ファイルの紹介
User.java ファイルは、User クラスを定義することでユーザーオブジェクトを表すために使用されます。
Userオブジェクトの宣言。Userクラスがidとnameの2つのプライベートフィールドを含むことを宣言し、引数なしのコンストラクタを提供します。idとnameフィールドの値を設定および取得することで、ユーザー情報を操作します。
コードは以下の通りです:
```java
private Long id;
private String name;
public User() {
}
```
Userオブジェクトの作成。 指定されたidとnameを持つUserオブジェクトを作成するために使用される、Userクラスの引数付きコンストラクタを定義します。
コードは以下の通りです:
```java
public User(Long id, String name) {
this.id = id;
this.name = name;
}
```
idとnameの値の取得と設定。idとname属性の値を取得および設定するために使用される、Userクラス内の4つのメソッドを定義します。getIdメソッドはid値の取得に使用され、setIdメソッドはid値の設定に使用されます。getNameメソッドはユーザー名nameの値の取得に使用されます。setNameメソッドはユーザー名nameの値の設定に使用されます。
コードは以下の通りです:
```java
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;
}
```
Userオブジェクトの文字列表現の返却。
User クラスの toString メソッドをオーバーライドし、User オブジェクトの文字列表現を返すために使用します。 @Override を定義して、親クラスの同名メソッドをオーバーライドします。toString メソッドを定義し、User オブジェクトの文字列表現を返すために使用します。文字列の連結により、id と name 属性の値を文字列としてフォーマットし、呼び出し元に User を返します。
コードは以下の通りです:
```java
@Override
public String toString() { return "User{" + id= + id + , name=' + name + ''' + }'; } ```
TestSpringbootApplication.java ファイルの紹介
TestSpringbootApplication.java ファイルは、UserDao インターフェースを通じてSpring Bootアプリケーションを起動するために使用されます。
TestSpringbootApplication.java ファイルのコードは、主に以下の要素で構成されています:
- クラスとインターフェースの定義。
現在のファイルが属するパッケージ名を com.oceanbase.testspringboot として宣言し、以下のインターフェースとクラスを含みます:
* `SpringApplication` クラス:Spring Bootアプリケーションの起動に使用されます。
* `@SpringBootApplication` アノテーション:このクラスがSpring Bootアプリケーションのエントリポイントであることを示すために使用されます。
コードは以下の通りです:
```java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
```
TestSpringbootApplicationクラスの定義。
SpringBootApplicationアノテーションを使用して、このクラスがSpring Bootアプリケーションのエントリクラスであることを示します。SpringApplicationクラスのrunメソッドを呼び出すことで、Spring Bootアプリケーションを起動できます。
コードは以下の通りです:
```java
@SpringBootApplication
public class TestSpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(TestSpringbootApplication.class, args);
}
}
```
TestSpringbootApplicationTests.java ファイルの紹介
TestSpringbootApplicationTests.java ファイルは、UserDao インターフェースを通じてSpring Bootアプリケーションを起動するために使用されます。
TestSpringbootApplicationTests.java ファイルのコードは、主に以下の部分で構成されています:
- 他のクラスとインターフェースの参照。
現在のファイルが属するパッケージ名を com.oceanbase.testspringboot として宣言し、以下のインターフェースとクラスを含みます:
* `UserDao` インターフェース:UserDaoインターフェースで定義されたメソッドを実装するために使用されます。
* `User` クラス:ユーザーデータの受け渡しと保存に使用されます。
* `Test` アノテーション:テストメソッドを識別するために使用されます。
Autowiredアノテーション:JdbcTemplateオブジェクトをこのクラスに注入し、SQL文の実行に使用します。SpringBootTestアノテーション:このクラスがSpring Bootのテストクラスであることを識別するために使用されます。JdbcTemplateクラス:SQL文の実行とデータベースアクセスの処理に使用されます。Listインターフェース:クエリ結果セットの操作に使用されます。
コードは以下の通りです:
```java
import com.oceanbase.testspringboot.dao.UserDao;
import com.oceanbase.testspringboot.entity.User;
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.jdbc.core.JdbcTemplate; import java.util.List;
```
TestSpringbootApplicationTestsクラスの定義。
SpringBootTest アノテーションを使用して、Spring Bootアプリケーション内の機能をテストすることを示します。UserDao および JdbcTemplate オブジェクトを使用して、ユーザーデータに対する追加、削除、変更、クエリ操作を実行し、結果を出力します。
- オブジェクトの定義。
Autowired アノテーションを使用して、UserDao および JdbcTemplate オブジェクトを自動的に注入します。
コードは以下の通りです:
```java
@Autowired
private UserDao userDao; @Autowired private JdbcTemplate jdbcTemplate; ```
contextLoadsメソッドの定義。
contextLoads メソッドをテストメソッドの具体的な実装として使用します。
test_springbootテーブルの削除。
jdbcTemplate.execute メソッドを使用してSQL文 drop table test_springboot を実行し、test_springboot という名前のテーブルを削除します。
コードは以下の通りです:
```java
try {
jdbcTemplate.execute("drop table test_springboot");
System.out.println("test_springboot delete successfully!");
}
```
test_springbootテーブルの作成。
jdbcTemplate.execute メソッドを使用してSQL文 create table test_springboot (id int primary key, name varchar(50)) を実行し、id と name の2つのフィールドを含む test_springboot という名前のテーブルを作成します。
コードは以下の通りです:
```java
catch (Exception ignore) {
} finally {
jdbcTemplate.execute("create table test_springboot (" +
id int primary key, + name varchar(50))); System.out.println("test_springboot create successfully!"); } ```
- データの挿入。
userDao.insertUser メソッドを使用して test_springboot テーブルに10件のユーザーデータを挿入します。id は1から10まで、name は "insert" + i となります。
コードは以下の通りです:
```java
for (int i = 1; i <= 10; i++) {
userDao.insertUser(new User((long) i, "insert" + i));
}
```
- データの削除。
userDao.deleteById メソッドを使用して、id が1のユーザーデータを削除します。
コードは以下の通りです:
```java
userDao.deleteById(1L);
```
- データの更新。
userDao.updateUser メソッドを使用して、id が2のユーザーデータを更新し、name を update に変更します。
コードは以下の通りです:
```java
userDao.updateUser(new User(2L, "update"));
```
- データのクエリ。
userDao.selectUserById メソッドを使用して、id が2のユーザーデータをクエリし、結果を出力します。
コードは以下の通りです:
```java
User user = userDao.selectUserById(2L);
System.out.println("user = " + user);
```
- すべてのデータのクエリ。
userDao.selectAllUsers メソッドを使用して、test_springboot テーブル内のすべてのユーザーデータをクエリし、結果を出力します。
コードは以下の通りです:
```java
List<User> userList = userDao.selectAllUsers();
userList.forEach(System.out::println);
```
完全なコードの表示
```xml
<?xml version="1.0" encoding="UTF-8"?>
<build>
<plugins>
<plugin>
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:oceanbase://host:port/schema_name?useSSL=false&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=user_name
spring.datasource.password=******
package com.oceanbase.testspringboot.dao.impl;
import com.oceanbase.testspringboot.dao.UserDao;
import com.oceanbase.testspringboot.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository("userDao")
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate; //Jdbc connection tool class
@Override
public boolean insertUser(User user) {
String sql = "insert into test_springboot(id,name)values(?,?)";
Object[] params = {user.getId(), user.getName()};
return jdbcTemplate.update(sql, params) > 0;
}
@Override
public boolean deleteById(Long id) {
String sql = "delete from test_springboot where id=?";
Object[] params = {id};
return jdbcTemplate.update(sql, params) > 0;
}
@Override
public boolean updateUser(User user) {
String sql = "update test_springboot set name=? where id=?";
Object[] params = {user.getName(), user.getId()};
return jdbcTemplate.update(sql, params) > 0;
}
@Override
public User selectUserById(Long id) {
String sql = "select * from test_springboot where id=?";
Object[] params = new Object[]{id};
return jdbcTemplate.queryForObject(
sql,
params,
new BeanPropertyRowMapper<>(User.class));
}
@Override
public List<User> selectAllUsers() {
String sql = "select * from test_springboot";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class));
}
}
package com.oceanbase.testspringboot.dao;
import com.oceanbase.testspringboot.entity.User;
import java.util.List;
public interface UserDao {
boolean insertUser(User user);
boolean deleteById(Long id);
boolean updateUser(User user);
User selectUserById(Long id);
List<User> selectAllUsers();
}
package com.oceanbase.testspringboot.entity;
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 + '\'' +
}';
}
}
package com.oceanbase.testspringboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TestSpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(TestSpringbootApplication.class, args);
}
}
package com.oceanbase.testspringboot;
import com.oceanbase.testspringboot.dao.UserDao;
import com.oceanbase.testspringboot.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
@SpringBootTest
class TestSpringbootApplicationTests {
@Autowired
private UserDao userDao;
@Autowired
private JdbcTemplate jdbcTemplate; //Jdbc connection tool class
@Test
void contextLoads() {
try {
// Use the execute() method to execute SQL statements and delete the user table test_springboot
jdbcTemplate.execute("drop table test_springboot");
System.out.println("test_springboot delete successfully!");
} catch (Exception ignore) {
} finally {
// Use the execute() method to execute SQL statements and create user table tests_ user
jdbcTemplate.execute("create table test_springboot (" +
id int primary key, +
name varchar(50)));
System.out.println("test_springboot create successfully!");
}
//UserDao userDao=new UserDaoImpl();
//ApplicationContext ioc=new ApplicationContext("/appli");`
//add
for (int i = 1; i <= 10; i++) {
userDao.insertUser(new User((long) i, "insert" + i));
}
//delete
userDao.deleteById(1L);
//update
userDao.updateUser(new User(2L, "update"));
//selectUserById
User user = userDao.selectUserById(2L);
System.out.println("user = " + user);
//query all users
List<User> userList = userDao.selectAllUsers();
userList.forEach(System.out::println);
}
}
関連情報
OceanBase Connector/Jの詳細については、OceanBase JDBCドライバをご参照ください。