対象ファイル
-
src/main/java/co/kr/two/mapper/MemberDaoMapper.java(アノテーションベース MyBatis マッパーインターフェース)
はじめに
今回は boot_two プロジェクトのアノテーションベース MyBatis マッパーインターフェースである MemberDaoMapper.java を分析した。
XML ファイルを使わず、Java インターフェース内に @Select などのアノテーションを直接記述して SQL 実行やパラメータバインディングを処理する仕組みについて整理してみた。
概要と基本情報
-
ファイルパス:
src/main/java/co/kr/two/mapper/MemberDaoMapper.java - 種類: MyBatis Mapper Interface (Annotation-based)
-
パッケージ:
co.kr.two.mapper -
主要構成要素:
@Mapper,@Select,@Insert,@Update,@Delete,@Param
主要構成要素およびコードの詳細
| 構成要素 | コード / 説明 | 役割および詳細内容 |
|---|---|---|
| Package | package co.kr.two.mapper; |
アノテーションベースのマッパーインターフェースが位置するパッケージの宣言 |
| Annotation | @Mapper |
MyBatis マッパーとして登録し、動的プロキシ実装体の自動生成および Spring Bean 登録を実行 |
| Search List (Map) |
@Select(...)getMemberList(Map<String, String> map)
|
Map パラメーターを受け取り、検索条件に応じた会員一覧を取得 |
| Search List (@Param) |
@Select(...)getMemberList2(@Param("sel") ..., @Param("sea") ...)
|
@Param アノテーションで明示的にパラメータ名をマッピングし、動的検索一覧を取得 |
| View Method |
@Select(...)getMemberView(@Param("id") String id)
|
特定 ID に該当する会員詳細情報を取得し MemberDto へマッピング |
| CUD Placeholder Methods |
memberSave(), memberUpdate(), memberDelete()
|
登録・修正・削除処理のためのメソッド宣言(現在 SQL 文字列は空状態) |
技術的評価および改善ポイント
1. SQL インジェクションの脆弱性への注意
検索処理において ${} 構文(文字列置換)が使用されている場合がある。カラム名や動的 SQL 構成以外の一般的な検索語入力に対しては、SQL インジェクション防止のため #{}(PreparedStatement バインディング)を使用するか、XML マッパーの動的 SQL への移行が推奨される。
2. CUD アノテーション SQL の実装
@Insert、@Update、@Delete アノテーション内の SQL 構文が現在空文字列となっているため、実際の DB 操作を実行するには適切な SQL 構文の追加が必要となる。
構成要素のまとめ
| 区分 | 要素名 | 役割 |
|---|---|---|
| Annotation | @Mapper |
アノテーションベースでの MyBatis 動的プロキシ生成 |
| Query Definition |
@Select, @Param
|
Java コード内での直接的な SQL 記述とパラメータバインディング |
| Security Note |
#{} vs ${}
|
セキュリティを考慮した安全なバインディング方式の選択 |
今回学んだこと
- XML ファイルを介さず、Java アノテーションで直接 SQL を定義するアノテーションベース MyBatis の仕組みを理解できた
- 動的クエリ記述時における SQL インジェクション対策や、パラメータバインディングのセキュリティ上の重要性を再確認できた
- 次のファイル分析へと進んでいきたい。