推奨リンク ----
リンク目次
Java環境構築
JDKインストール手順
Oracle公式サイトから最新の安定版JDKをダウンロードしてください
JDKインストール後、JAVA_HOMEという環境変数を設定し、JDKのインストールパスを指すようにします。例えば:C:\Program Files\Java\jdk\jdk-21 (注:jdkとjdk-21は異なるバージョン管理のために作成したフォルダです)
次に、JAVA_HOMEのbinディレクトリをシステム環境変数PATHに追加します。
Path=%JAVA_HOME%\bin;<既存の他のパス>
設定完了後、コマンドプロンプトで java -version を実行すると対応するバージョンが表示されます。もしバージョン21ではなく15や1.8などが表示される場合、複数のJDKがシステムに存在しており、デフォルトがJDK 21ではないことを意味しているため、JDK 21をPATHの先頭に配置する必要があります
最初のJavaアプリケーション
//ファイル名はGreetingApp.javaとし、クラス名GreetingAppと完全一致させる必要があります
public class GreetingApp {
public static void main(String[] args) {
System.out.println("Welcome, Java World!");
}
}
//Javaソースコードはテキストファイルであり、まずjavacでGreetingApp.javaをバイトコードファイルGreetingApp.classにコンパイルし、その後javaコマンドで実行します
cd xxxx //Javaファイルのあるディレクトリへ移動
javac GreetingApp.java //カレントディレクトリにGreetingApp.classファイルが生成される
java GreetingApp //拡張子.classは不要
Spring Bootプロジェクト設定
標準的なディレクトリ構造
プロジェクトルート/src/main/java:プロジェクトのJavaソースコード配置場所
プロジェクトルート/src/main/resources:プロジェクトの静的リソースと設定ファイル配置場所
プロジェクトルート/src/test/java:プロジェクトのテストケースコード配置場所
///src/main/java
|_annotations:カスタムアノテーション配置
|_interceptors:インターセプター関連コード配置
|_configurations:設定クラス配置
|_constants:定数・列挙型定義配置
|__constants:定数定義保管
|__enumerations:列挙型定義保管
|_controllers:コントローラークラス配置
|_filters:フィルター・インターセプター関連コード配置
|_repositories:データアクセス層インターフェース配置
|_entities:データモデルクラス配置
|__domain:データベースエンティティオブジェクト定義配置
|__transfer:データ転送オブジェクト定義配置
|__presentation:表示層オブジェクト定義配置
|_services:ビジネスロジック層コード配置(インターフェースと実装分離)
|__interfaces:ビジネスロジックインターフェース定義配置
|__implementations:ビジネスロジック実装クラス配置
|_utilities:ユーティリティクラス配置
///src/main/resources
|_mappers:MyBatisのXMLマッピングファイル配置(MyBatisプロジェクトの場合)
|_static:ウェブ静的リソース配置、js/css/imgなど
|__javascripts:
|__stylesheets:
|__images:
|__fonts:
|__その他
|_templates:ウェブテンプレート配置、Thymeleaf/Freemarkerテンプレートなど
|__headers
|__sidebars
|__footers
|__XXX.htmlなど
|_application.yml 基本設定ファイル
|_application-dev.yml 開発環境設定ファイル
|_application-test.yml テスト環境設定ファイル
|_application-prod.yml 本番環境設定ファイル
XML設定ファイル構造
<?xml version="1.0" encoding="UTF-8" ?>
<!--mybatis-3-mapper.dtd: 制約ファイル名で、現在のファイル内でのタグと属性がMyBatis要件を満たすことを制限・検証する-->
<!--namespace: 名前空間で、一意の値を持ち、DAOインターフェースの完全修飾名を使用する必要がある(1つのDAOインターフェースに対応する1つのマッパーで、namespaceで対応するDAOインターフェースを指定する)-->
<mapper namespace="com.example.project.repository.IEmployeeRepository">
<!--すべてのデータベース操作はmapperタグ内に記述し、特定のタグでデータベースの特定操作を表現する-->
</mapper>
データベース接続設定
関連依存関係
MySQL接続
//Spring Bootプロジェクト作成時にMySQLドライバーを選択すると、Springのデフォルトドライバーが自動ダウンロードされる、通常MySQL依存関係のバージョンは高い
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
//MySQL 8.xバージョン用設定
//MySQL 5.7依存関係がダウンロードできない場合、以下に変更可能
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
<!--<version>8.0.27</version>-->
</dependency>
//5.1.xバージョンのMySQL依存関係
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
JPAサポート
//import javax.persistence.*;
/**
Jakarta EE 8以上バージョンでは以下のインポートを使用
import jakarta.persistence.*;
*/
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
ログレベル設定
ログレベルは以下の順序で並べられる(高い順から低い順):ERROR > WARN > INFO > DEBUG > TRACE。したがって、ログレベルをWARNに設定することで警告レベル以上のログメッセージのみが出力される。
logging.levelはログレベルを指定するプロパティで、rootはルートログ記録装置を表す。
logging.level.rootの値をWARNに設定することで、ログフレームワークに警告レベル(WARN)以上のログメッセージのみを出力し、それより低いレベルのメッセージを無視するよう指示する。これによりログ出力量を削減し、警告、エラー、重大なログのみを表示できる。
application.properties設定
#Spring Boot 2.0バージョン時(組み込みJDBC5ドライバー)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/database_name?characterEncoding=utf-8&useSSL=false
#ユーザー名
spring.datasource.username=root
#データベースパスワード
spring.datasource.password=root
------------------------------------------------------------------------------
注意:ドライバーとURLの変更点
------------------------------------------------------------------------------
#Spring Boot 2.1以上バージョン時(組み込みJDBC8ドライバー)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/database_name?serverTimezone=GMT%2B8
#ユーザー名
spring.datasource.username=root
#データベースパスワード
spring.datasource.password=root
#JPA設定
//このプロパティはHibernateが使用するデータベース方言を指定する。この場合、HibernateにMySQL x.xバージョンの方言を使用するよう指示し、Spring Bootが参照するMySQL依存関係バージョンを確認してデータベースとの互換性を確保すること。
#5.7.x
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
#8.x
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
#このプロパティはコンソールに生成されたSQL文を表示するかどうかを指定する。trueに設定すると、Hibernateは実行されたSQL文をコンソールに出力し、デバッグと生成SQLの確認に便利。
spring.jpa.show-sql=true
#このプロパティはHibernate起動時のデータベーステーブル自動操作を指定する。updateはHibernateがエンティティクラス定義に基づいてデータベーステーブル構造を自動的に更新することを意味し、テーブルの削除や再作成はしない。つまり、テーブルが存在しない場合、Hibernateは作成を試みる。既存テーブルがあれば、エンティティクラス定義に基づいてテーブル構造を更新する。
spring.jpa.hibernate.ddl-auto=update
#MyBatis
#エンティティ別名
#mybatis.type-aliases-packageは型別名のパッケージパスを指定する設定項目。
#com.springboot.entityは具体的なパッケージパスで、スキャン対象のパッケージを示し、使用するエンティティクラスが含まれている。
#この設定により、マッピングファイル内のresultType属性で直接エンティティクラス名を使用できる。
mybatis.type-aliases-package=com.springboot.entity
#マッピングファイル配置場所
#mybatis.mapper-locationsはMyBatisマッピングファイルの配置場所を指定する設定項目。
#classpath:はプレフィックスで、クラスパスからリソースを探すことを示す。Spring Bootではクラスパスはプロジェクトのresourcesディレクトリを指す。
#mapper/はマッピングファイルの相対パスを示す。ここではresourcesディレクトリ下のmapperディレクトリにあると仮定。
#*.xmlはワイルドカードで、.xmlで終わるすべてのファイルを示す。ここでいうと、.xmlで終わるすべてのファイルがMyBatisマッピングファイルとして扱われる。
mybatis.mapper-locations=classpath:mapper/*.xml
#ポート設定
#SpringBootアプリケーションのWebポート変更
server.port=9090
#ポート番号を0に設定すると、OSが利用可能なポート番号を自動割り当て
server.port=0
#ログレベルをより高いもの(WARNやERROR)に設定して出力ログ量を削減
logging.level.root=WARN
データベース接続確認テスト
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 org.junit.runner.RunWith;
//import org.springframework.test.context.junit4.SpringRunner;
//@RunWith(SpringRunner.class)
@SpringBootTest
public class DatabaseConnectionVerificationTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
public void verifyDatabaseConnection() {
//テストが通過し期待結果が出力されれば、データベース接続設定が正しく、アプリケーションがデータベースに正常に接続できることを示す。
//テストメソッド実行後、最終ログに:Database connection verification successful. Result: 1 が表示されるか確認、ログ上部の赤い警告は無視可
//2回目のSELECT VERSION();は、接続データベースのバージョンを確認するために使用、再度実行して最初のクエリ結果と異なるか観察
//データベース接続テストが失敗する場合、上記のコメントアウトされたアノテーションとインポートを解除して再度試す。
String result = jdbcTemplate.queryForObject("SELECT 1;", String.class);
//データベースバージョン確認
// String result = jdbcTemplate.queryForObject("SELECT VERSION();", String.class);
System.out.println("Database connection verification successful. Result: " + result);
}
}
エンティティクラス作成
@Data // getter、setter、equals、hashCode、toStringメソッド自動生成
@AllArgsConstructor //全フィールドを含むコンストラクタ自動生成
@NoArgsConstructor //引数なしコンストラクタ自動生成
@Active //カスタムアノテーションと仮定、必要に応じて定義
@Table(name = "users_table") //データベーステーブル名指定
public class UserEntity {
@Id //主キー識別
@GeneratedValue(strategy = GenerationType.IDENTITY) //主キー生成戦略を自動採番に指定
private Long userId;
private String userName;
private String createdBy;
private LocalDateTime creationTime;
}
コントローラー層作成
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
@RestController
public class UserManagementController {
@GetMapping("/welcome")
public String welcome(){
return "GET: Welcome, Spring Boot!";
}
@PostMapping("/welcome")
public String welcome(@RequestBody String username) {
return "POST: Welcome, " + username + "!";
}
@GetMapping("/welcome/{identifier}/{username}")
public String welcomeGet(@PathVariable Long identifier,@PathVariable String username){
//パスパラメータ@PathVariable
return "GET: Welcome, " + "id :" + identifier + "username :" + username;
}
@PostMapping("/welcomePost")
public String welcomePost(@RequestParam(name = "inputName",required = false) String username){
//@RequestParam(name = "inputName",required = false) パラメータ名をinputNameとし、必須パラメータを解除
return "POST: Welcome, Spring Boot!";
}
@GetMapping("/welcomeTime")
public String welcomeTime(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime creationTime){
//時間パラメータ形式制御
return "Welcome " + creationTime;
}
}
リポジトリ層作成
import com.springboot.entity.UserEntity;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserRepository {
List<UserEntity> fetchAllUsers();
}
//DAO層対応XMLメソッド、配置場所 src/main/resources/mapper/UserRepository.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--mybatis-3-mapper.dtd: 制約ファイル名で、現在のファイル内でのタグと属性がMyBatis要件を満たすことを制限・検証する-->
<!--namespace: 名前空間で、一意の値を持ち、DAOインターフェースの完全修飾名を使用する必要がある(1つのDAOインターフェースに対応する1つのマッパーで、namespaceで対応するDAOインターフェースを指定する)-->
<mapper namespace="com.springboot.repository.UserRepository">
<!--すべてのデータベース操作はmapperタグ内に記述し、特定のタグでデータベースの特定操作を表現する-->
<select id="fetchAllUsers" resultType="UserEntity">
select user_id,user_login,user_name,user_description,create_time from users_table
</select>
</mapper>
サービス層作成
import com.springboot.entity.UserEntity;
import java.util.List;
public interface UserServiceInterface {
List<UserEntity> fetchAllUsers();
}
//サービス層インターフェース実装
import com.springboot.repository.UserRepository;
import com.springboot.entity.UserEntity;
import com.springboot.service.UserServiceInterface;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImplementation implements UserServiceInterface {
@Autowired
private UserRepository userRepository;
@Override
public List<UserEntity> fetchAllUsers() {
return userRepository.fetchAllUsers();
}
}
特別機能
Spring Bootプロジェクトの/src/main/resourcesディレクトリ下にbanner.txtファイルを作成し、ASCIIアートをコピーすればデフォルトのバナーを置き換えられます
${AnsiColor.BRIGHT_RED}:コンソール出力色設定
${application.version}:MANIFEST.MFファイルからバージョン番号取得
${application.formatted-version}:整形後の${application.version}バージョン情報
${spring-boot.version}:Spring Bootバージョン番号
${spring-boot.formatted-version}:整形後の${spring-boot.version}バージョン情報