中級者向け

Java

【Spring Boot】フォームログイン機能を実装する

こんにちは、かつコーチです。前回の記事でSpring Securityの基本を解説しましたが、.formLogin(Customizer.withDefaults())だけでは、Spring Securityが自動生成した無機質なログイン画...
Java

【Spring Boot】Spring Securityの基本を理解する

こんにちは、かつコーチです。spring-boot-starter-securityを依存関係に追加した瞬間、それまで自由にアクセスできていた画面が突然ログイン画面に切り替わって驚いた経験はありませんか。これはSpring Security...
Java

【Spring Boot】DTOとEntityを使い分ける設計の考え方

こんにちは、かつコーチです。「EntityをそのままControllerでレスポンスとして返しているけど、これで大丈夫かな」と不安になったことはありませんか。動くには動くのですが、この書き方は運用が進むにつれて確実に問題を起こします。この記...
Java

【Spring Boot】Bean Validationでフォームの入力チェックを実装する

こんにちは、かつコーチです。フォームの入力チェックを、Controllerの中でif文を並べて書いていませんか。その方法だと、チェック項目が増えるたびにControllerが肥大化し、同じ検証ロジックを別の画面でも書き直すはめになります。S...
Java

【Spring Boot】@Queryでカスタムクエリを書く

こんにちは、かつコーチです。前回、クエリメソッドは条件が複雑になるとメソッド名が長くなりすぎると触れました。そんなときに使うのが@Queryアノテーションです。今回は@Queryを使ったJPQL・ネイティブSQLの書き方を解説します。@Qu...
Java

【Spring Boot】クエリメソッドの命名規則

こんにちは、かつコーチです。findAll()やfindById()は便利ですが、「価格が3000円以上の書籍だけ取得したい」のような条件検索はどうすればよいのでしょうか。Spring Data JPAには、クエリメソッドというメソッド名だ...
Java

【Spring Boot】@OneToMany・@ManyToOneでリレーションを組む

こんにちは、かつコーチです。これまで扱ってきたBookEntityは単独のテーブルでしたが、実際のアプリケーションでは「著者(Author)が複数の書籍(Book)を持つ」のようなテーブル間のリレーションが必ず出てきます。今回は@OneTo...
Java

【Spring Boot】コンストラクタインジェクションと@Autowiredの使い分け

こんにちは、かつコーチです。DIの基本的な考え方、Controller・Service・Repositoryの役割、そしてThymeleafでの画面作成まで見てきました。ここまでの記事ではDIの実装方法として@Autowiredをさらっと使...
Java

【Java】JUnit5のパラメータ化テストを中級者向けに解説

こんにちは、かつコーチです。「同じロジックを、入力値だけ変えて何パターンもテストしたい」というとき、@Testメソッドをコピペして値だけ変えていませんか。今回はJUnit5のパラメータ化テスト(同じテストロジックを異なる入力値で繰り返し実行...
Java

【Java】Mockitoでモックを使う方法を中級者向けに解説

こんにちは、かつコーチです。外部APIやデータベースに依存するクラスをテストしようとして、テスト環境の準備だけで疲れてしまった経験はありませんか。今回はJavaのテストで広く使われるMockito(依存クラスの動きを偽物(モック)に差し替え...
Java

【Java】JavaのRunnableとCallableの違い:戻り値と例外処理から理解する

こんにちは、かつコーチです。前回はThreadの基本を扱いましたが、今回は並行処理でタスクを表現する2つのインターフェース、RunnableとCallableの違いを整理します。「どちらを使えばいいのか」で迷った経験がある方向けの内容です。...
Java

【Java】JavaのThreadの基本:作り方と並行処理の仕組みを理解する

こんにちは、かつコーチです。今回はJavaの並行処理の入口となるThreadクラスを扱います。「メソッドを2つ同時に動かすにはどうすればいいのか」という素朴な疑問から、スレッドの作り方・注意点まで整理していきます。スレッドとは何かプロセスと...
Java

【Java】JavaのJDBCでデータベースに接続する基本

こんにちは、かつコーチです。Spring Bootのような便利なフレームワークを使う前に、「Javaは素の状態でどうやってデータベースにつながっているのか」を知りたくなったことはありませんか。今回はJavaの標準APIJDBC(Java D...
Java

【Java】Javaの正規表現(Pattern・Matcher)の基本と使い方

こんにちは、かつコーチです。メールアドレスの形式チェックや文字列からの数値抽出で、if文とsubstringを組み合わせて力技で書いてしまった経験はありませんか。今回はJavaで文字列のパターンマッチングを行う正規表現(文字列のパターンを記...
Java

【Java】Javaのjava.nio.fileでファイル入出力を行う基本

こんにちは、かつコーチです。「ファイルを読み書きしたいだけなのに、FileReaderやBufferedReaderを何行も書くのが面倒」と感じたことはありませんか。今回はJava 7以降の標準であるjava.nio.file(新しいファイ...
Java

【Java】Javaのメソッド参照の使い方を4パターンで解説

こんにちは、かつコーチです。s -> s.length()のようなラムダ式をあちこちで見かける一方、String::lengthという書き方に戸惑ったことはありませんか。今回はJavaのメソッド参照(既存のメソッドをそのままラムダ式代わりに...
Java

【Java】JavaのStream終端操作(collect・reduce)の使い方

こんにちは、かつコーチです。filterやmapで加工したStreamを、結局どうやって最終結果として取り出せばいいのか迷った経験はありませんか。今回はStream処理の締めくくりとなる終端操作(Streamを消費して最終的な結果を返す操作...
Java

【Java】JavaのStream中間操作(filter・map・sorted)の使い方

こんにちは、かつコーチです。前回はStream APIの全体像を解説しましたが、今回は実務で最もよく使う中間操作(Streamを加工して次の処理に渡す操作)であるfilter・map・sortedを掘り下げます。中間操作とは?中間操作の役割...
Java

【Java】Java Stream APIの使い方を基本から解説

こんにちは、かつコーチです。Listをfor文でループしながらif文で絞り込んで、さらに別のListに詰め替える…という処理を書いて、コードが長くなった経験はありませんか。今回はJava 8で導入されたStream API(コレクションの要...
Java

【Java】Javaの関数型インターフェース(Function・Predicate等)の使い方

こんにちは、かつコーチです。ラムダ式を書けるようになったものの、「どの型に代入すればいいのか分からない」と迷った経験はありませんか。今回はJavaが標準で用意している関数型インターフェース(Function・Predicate・Consum...