1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MybatisのMapperXMLファイル備忘録

Posted at

目的

現場で触る機会のあるMybatisのMapperXMLファイルの書き方について備忘のため

Mybatisの特徴

①SQLとJavaコードを分離する

SQL文をJavaコードから切り離し、XMLファイルに一元管理します。これにより、SQLの変更がJavaコードに影響を与えにくくなり、保守性が向上します。

②SQLの柔軟性

JDBCよりもはるかに柔軟なSQL記述が可能です。動的なSQLを組み立てるための強力な機能(if, foreach, whereなど)を提供します。

③シンプルなマッピング

SQLの結果をPOJO(Plain Old Java Object)に簡単にマッピングできます。

備忘録

適宜追記していきます。

$と#の使い分け

MybatisにはPreparedStatementという、SQL文をあらかじめコンパイルし後からパラメータを安全にバインドするための仕組みがある。

#{id}のような形で記載すると、プレースホルダとして扱われ、パラメータがバインドされる対象となる。
これによってSQLインジェクションを防ぐことが出来るというメリットがある。
基本的にこちらを使用すればOK

一方で、${group}のような形で記載すると、プレースホルダとして扱われることなく、直接SQL文に埋め込まれることとなる。
使いどころ:テーブル名やカラム名などのメタ情報を動的に埋め込みたいとき

テーブルで自動採番されるカラムの取り扱い

ステートメントの属性として以下を指定する。
・useGeneratedKeys
・keyProperty
useGeneratedKeysをtrueとすることで自動採番ということを示し、DBで生成された値がKeyPropertyで示されたフィールドにマッピングされる。
また、自動採番のカラムはSQLに含める必要はない。

※insert時にNULL制約のエラーが出たらDB側で自動採番設定が出来ているか確認しましょう

<insert id="insertAuthor" useGeneratedKeys="true"
    keyProperty="id">
  insert into Author (username,password,email,bio)
  values (#{username},#{password},#{email},#{bio})
</insert>

ドキュメント

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?