Springboot
SpringBoot は Pivotal チームが提供した新しいフレームワークです。設計目的は、Spring アプリケーションの初期構築と開発過程を簡単にすることです。
クイックスタート
Step 1:新しいモジュールを作成する
Spring boot プログラムを作成する場合は、Spring Initializr を選択します。

Step 2:必要な技術セットを選択する
Web プロジェクトを開発するため、Spring Web 技術を選択します。

Step 3:Controller クラスを開発する
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id) {
System.out.println("Hello Spring boot" + id);
return "Hello Spring boot";
}
}Step 4:Application クラスを実行する
コンソールに次のような内容が出力されれば、プログラムは正常に起動しています。

この入門例から分かるように、多くの設定作業が省略され、プロジェクトの初期構築がかなり簡単になります。
クイック起動
Spring Boot はクイック起動方式も提供しています。追加ソフトウェアをインストールする必要はなく、対応バージョンの Java があれば実行できます。
まず開発者が Spring Boot プロジェクトをパッケージ化します(Maven の package コマンドを実行)。
他の人はコマンドラインで java -jar bootProjectName.jar を実行するだけで、プログラムを起動できます。

YML 設定ファイル形式
三つのファイル形式:
application.propertiesapplication.ymlapplication.yaml
優先度:
.properties>.yml>.yaml
今後は主に yml 形式の設定ファイルを使います。
YML(または YAML、YAML Ain't Markup Language)は、よく使われるデータシリアライズ形式です。特に設定ファイルに適しています。人が読み書きしやすく、簡単なデータ表現もできます。
基本構文
- 大文字と小文字を区別する。
- 値の前には区切りとしてスペースが必要。
- インデントで階層を表す。Tab は使えず、Space だけを使う。一般的には 2 個または 4 個。
- スペースの数は重要ではない。同じ階層の要素が左揃えであればよい。
#はコメントを表し、その行をコメントにする。
データ形式
- コロンでキーと値を分ける。
person:
name: John Doe
age: 30
city: New York- 配列(リスト):ハイフンでリスト項目を表し、各項目は一行に書く。
hobbies:
- reading
- sports
- movies
# またはインライン形式
hobbies: [reading, sports, movies]- 文字列
- 通常文字列:そのまま書く。引用符は不要。
- ダブルクォート文字列:文字列内の特殊文字をエスケープしない。
- シングルクォート文字列:文字列内の特殊文字をエスケープする。
- 複数行文字列
- 改行を保持する複数行文字列:
|を使う。
- 改行を保持する複数行文字列:
description: |
This is a multi-line
string with newlines preserved.* 改行を折りたたむ複数行文字列:`>` を使う。
poem: >
Roses are red,
violets are blue.
Sugar is sweet,
and so are you.実例
# 現在のサーバー情報を設定する
server:
port: 8080
address: 127.0.0.1
# データソースを設定する
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# メインデータソース
master:
url: jdbc:mysql://localhost:3306/dataBase
username: root
password: root読み取り方式
- 方式一
クラス内に対応する private メンバ変数を作成し、@Value アノテーションで値を注入します。
lesson: "张三"@Value("@{lesson}")
private String name;- 方式二
自動装配を使い、get() メソッドで取得します。
@Autowired
private Environment environment;- 方式三
対応するエンティティクラスを作成し、そのクラスを Bean として宣言します。その後、@ConfigurationProperties() で受け取ります。
複数環境設定
実際の開発では、各工程で設定情報を変える必要があります。そのため、複数の環境を設定し、必要に応じて切り替えます。
例:本番環境、開発環境、テスト環境。
yml ファイルでは、異なる環境の間に三つのハイフン --- を追加します。
# 起動環境を設定する
spring:
profiles:
active: dev
---
# 本番環境
spring:
profiles: pro
server:
port: 8081
---
# 開発環境
spring:
profiles: dev
server:
port: 8082
---
# テスト環境
spring:
profiles: test
server:
port: 8083後で jar パッケージを使うとき、コマンドラインで直接環境を指定できます。
java -jar springbootName.jar --spring.profiles.active=dev
java -jar springbootName.jar --spring.profiles.active=pro
java -jar springbootName.jar --spring.profiles.active=testMaven の環境との互換
yml 設定ファイルのデフォルト環境が dev で、maven のデフォルト環境が pro の場合、コマンドラインで jar を起動すると、Maven 側のデフォルトである pro が起動します。
そのため、yml のデフォルト環境は、できるだけ pom のプロパティから読み取る形にします。
<!--Mavenで複数環境プロパティを設定する-->
<profiles>
<profile>
<id>dev env</id>
<properties>
<profile.active>dev</profile.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>pro env</id>
<properties>
<profile.active>pro</profile.active>
</properties>
</profile>
<profile>
<id>test env</id>
<properties>
<profile.active>test</profile.active>
</properties>
</profile>
</profiles># SpringBootでMavenプロパティを参照する
spring:
profiles:
active: ${profile.active}リソースファイルでデフォルトプレースホルダー解析を有効にします。
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>utf-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
</build>Mybatis との統合
Step 1:プロジェクトを作成する
ここでも Spring Initializr を選択します。

Step 2:技術セットを選択する
Mybatis と統合するため、Mybatis フレームワークを導入します。
使用するデータベースは MySQL なので、MySQL の依存も導入します。

Step 3:エンティティクラスを作成する
データベースに User ユーザーテーブルがあると仮定します。テーブル構造は次の通りです。
ユーザーテーブル user
| フィールド名 | データ型 | 説明 | 制約 |
|---|---|---|---|
| id | int | 主キー | 主キー、自動増加 |
| name | varchar(5) | 名前 | |
| phone | varchar(11) | 電話番号 | |
| sex | varchar(2) | 性別 |
対応するエンティティクラスを作成します。
public class User {
private Long id;
private String name;
private String phone;
private String sex;
//setter & getter & toString
}Step 4:データベースへ接続する
yml 設定ファイルでデータベースへ接続します。
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/store
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSourceStep 5:データ層を作成する
Application 起動クラスと同じ階層に mapper ディレクトリを作成し、UserMapper インターフェースを作ります。
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User selectById(Long id);
}テスト
Spring Boot が提供する SpringBootTest でテストできます。
@SpringBootTest
class UserApplicationTests {
@Autowired
private UserMapper userMappper;
@Test
void test(){
User user = userMapper.selectById(1);
System.out.println(user);
}
}開発全体フロー
はじめに
現在、多くの CRUD サイトは Springboot + mybatis をもとに開発されています。ここでは、この技術スタックで企業レベルの機能モジュールを一通り開発する流れを説明します。
要件分析
要件分析は非常に重要です。要件側と十分にコミュニケーションし、実装すべき機能と業務要件を詳しく収集、整理、分析します。たとえば、ユーザー操作の流れ、期待されるデータ表示形式、各機能モジュールの関係などを明確にします。最終的に、後続開発の根拠となる明確な要件文書を作ります。
ここでは、ユーザー情報を管理する簡単なモジュールを例にします。
管理者はユーザー情報を追加、削除、変更、検索できます。
データベース定義
要件分析の結果に基づいて、データベース構造と関連設定を決めます。ここでは MySQL データベースを使い、次の User テーブルを作成します。
| フィールド名 | 型 | 説明 | 制約 |
|---|---|---|---|
| id | int | 一意識別子 | 主キー、自動増加 |
| username | varchar(50) | アカウント | 非 NULL、一意 |
| password | varchar(100) | パスワード | 非 NULL |
| name | varchar(10) | ユーザー名 | 非 NULL |
| phone | varchar(20) | 電話番号 | 非 NULL、一意 |
| address | varchar(50) | 住所 | 非 NULL |
| create_time | datetime | 作成時間 | 非 NULL |
| update_time | datetime | 更新時間 | 非 NULL |
対応する SQL:
CREATE TABLE `user` (
`id` int AUTO_INCREMENT PRIMARY KEY,
`username` varchar(50) NOT NULL UNIQUE,
`password` varchar(100) NOT NULL,
`name` varchar(10) NOT NULL,
`phone` varchar(20) NOT NULL UNIQUE,
`address` varchar(50) NOT NULL,
`create_time` datetime NOT NULL,
`update_time` datetime NOT NULL
);インターフェース定義
外部システムとやり取りする API を定義します。リクエスト方式、パラメータ形式、戻り値形式などを明確にします。
SpringMVC の REST スタイルに従い、次の API を定義します。
http://localhost/users:すべてのユーザー情報を検索、GEThttp://localhost/users/1:指定ユーザー情報を検索、GEThttp://localhost/users:ユーザー情報を追加、POSThttp://localhost/users:ユーザー情報を変更、PUThttp://localhost/users/1:ユーザー情報を削除、DELETE

ツール選択
Windows 10 上で IDEA を使って開発します。
- OS:Windows 10 X 64
- Java 開発キット:JDK 21
- プロジェクト管理ツール:Maven 3.6.3
- 開発ツール:IntelliJ IDEA 2021.1.3 x64
- データベース:Mysql
- ブラウザ:Edge
- サーバー構成:Spring Boot 3.3.3 + MyBatis 3.0.3 + Mysql Driver 8.3.0
開発を簡単にするため、Lombok 1.18.34 も使います。
プロジェクト作成
ここではモジュール分割方式でプロジェクトを作成します。
プロジェクト Store は三つのモジュールで構成されます。
store-common:共通常量、例外、統一結果、ツールなどを保存するstore-pojo:エンティティクラスを保存するstore-server:主な業務を保存する

データベース接続とエンティティクラス
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/store?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: yourPassword
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.store.entity
configuration:
map-underscore-to-camel-case: trueエンティティクラスは store-pojo パッケージ下の entity に置きます。
@Data
public class User{
private Long id;
private String username;
private String password;
private String name;
private String phone;
private String address;
private LocalDateTime createTime;
private LocalDateTime updateTime;
}データ層
開発順序は、データベース -> 永続層 -> 業務層 -> 表示層 -> フロントエンドページ にします。
機能面では、基本機能から作り、追加 -> 検索 -> 削除 -> 変更の順で開発します。
新しいユーザーを追加する SQL:
INSERT INTO `user` (`username`, `password`, `name`, `phone`, `address`, `create_time`, `update_time`)
VALUES ('test_user', 'hashed_password', '张三', '13812345678', '北京市朝阳区', '2024-12-20 10:00:00', '2024-12-20 10:00:00');store-service パッケージ下に mapper.UserMapper インターフェースを作成します。
@Mapper
public interface UserMapper {
@Insert("INSERT INTO user (username,password,name,phone,address,create_time,update_time)" +
"VALUES (#{username},#{password},#{name},#{phone},#{address},#{createTime},#{updateTime})")
void addUser(User user);
}XML マッピング方式も使えます。resources 下に mapper パッケージを作成し、UserMapper のマッピングファイルを置きます。
@Mapper
public interface UserMapper {
void addUser(User user);
}<mapper namespace="com.angelday.mapper.UserMapper">
<insert id="addUser" useGeneratedKeys="true" keyProperty="uid">
INSERT INTO user (username,password,name,phone,address,create_time,update_time)" +
"VALUES (#{username},#{password},#{name},#{phone},#{address},#{createTime},#{updateTime})
</insert>
</mapper>マッピングファイルを使う場合は、設定ファイルでスキャンパスを指定する必要があります。
mybatis:
mapper-locations: classpath:mapper/*.xml永続層が完成したら、SpringBootTest で必ずテストします。問題範囲を小さくできます。
業務層
ルートディレクトリ下に service.UserService インターフェースを作成します。
public interface UserService {
void addUser(User user);
}実装クラス service.impl.UserServiceImpl を作成します。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public void add(User user) {
user.setCreateTime(LocalDateTime.now());
userMapper.addUser(user);
}
}実装後は単体テストを行います。
表示層
先に統一結果クラスを作成します。ここでは store-common 下に result.Result クラスを作ります。
@Data
public class Result<T> {
private Integer code;
private String msg;
private T data;
public static <T> Result<T> success() {
Result<T> result = new Result<T>();
result.code = 200;
return result;
}
public static <T> Result<T> success(T object) {
Result<T> result = new Result<T>();
result.data = object;
result.code = 200;
return result;
}
public static <T> Result<T> error(String msg) {
Result result = new Result();
result.msg = msg;
result.code = 0;
return result;
}
}前に定義した API によると、このモジュールのパスはすべて http://localhost/users 配下です。controller.UserController クラスを作成します。
@RestController
@RequestMapping("users")
public class UserController{
@Autowired
private UserService userService;
@PostMapping()
public Result addUser(@RequestBody User user){
userService.addUser(user);
return Result.success();
}
}フロントエンドとバックエンドの連携テスト
バックエンド開発では、PostMan で API テストを行えます。
localhost:8080/users
リクエストボディ:
{
"username": "test_user",
"password": "test_password",
"name": "张三",
"phone": "13812345678",
"address": "北京市朝阳区"
}データベースへ正常に追加されれば、このモジュールの開発は完了です。
最適化
この記事では例外設計を行っていません。厳密には、SpringMVC の章のように例外を分け、集中処理する必要があります。
本文中の 200 ステータスコードはリテラルとして直接書かれています。厳密には store-common パッケージ下に定数クラスを作成し、事前に決めた定数をまとめて管理するべきです。
