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 自動生成ファイルの使い方

Posted at

業務でMyBatis Generatorを使う機会があり、基本的な使い方を整理したので共有します。

MyBatis Generator によって自動生成されるファイルを使えば、XMLファイルを手書きする必要がなくなり、以下のような基本的な SQL 操作に対応できます。
今回は SELECT / INSERT / UPDATE に絞って紹介します。

🔍 SELECT

JOIN を必要としない単一テーブルからの SELECT であれば、自動生成ファイルのみで十分対応可能です。
たとえば、プルダウン生成など「キーとバリューだけ取得したい」場面で役立ちます。
自動生成されるファイルは以下の2種類で、テーブルごとに作成されます:

  • Book.java
  • BookExample.java

この Example クラスを使って、柔軟に WHERE 句を構築できます。

全件取得するサンプル:

public List<Book> findAll() {
    // 条件なしで全件取得
    return BookMapper.selectByExample(new BookExample());
}

削除されていないレコードのみ取得するサンプル:
論理削除フラグ deleted が false のレコードのみ取得する例。

public List<Book> findAll() {
    BookExample example = new BookExample();
    example.createCriteria().andDeletedEqualTo(false);
    return BookMapper.selectByExample(example);
}

<補足>

  • selectByExampleは、Exampleに指定された条件に一致するレコードをすべて取得します。条件が空の場合(初期化したnew BookExample() を渡した場合)は全件取得になります。

  • BookExampleは検索条件を組み立てるためのクラスで、内部にCriteriaを持ち、AND条件などをメソッドチェーンで記述できます。

INSERT

まずはControllerから。
formを受け取って、DB登録用のEntityに詰め替えて、サービス層へ渡す。

@PostMapping("/insert")
public String insert(@ModelAttribute BookForm form) {
    Book book = toEntity(form);  // 入力フォームをDB登録用のEntityに変換
    bookService.insert(book);
    return "redirect:/CompleteInsertBook";
}

// 詰め替えメソッド
public static Book toEntity(BookForm form) {
    Book book = new Book();
    book.setId(form.getId());
    book.setTitle(form.getTitle());
    book.setAuthor(form.getAuthor());
    book.setGenreId(form.getGenreId());
    book.setIsbn(form.getIsbn());
    return book;
}

Service
insertSelectiveメソッドを使うことで、Entityクラスに値が格納された非nullフィールドのみ対象としてINSERTされます。

public void insert(Book book) {
    bookMapper.insertSelective(book); // nullフィールドは除外してINSERT
}

UPDATE

ControllerはInsertとほぼ同じ。
formを受け取って、DB登録用のEntityに詰め替えて、サービス層へ渡す。

@PostMapping("/update")
public String update(@ModelAttribute BookForm form) {
    Book book = toEntity(form);  // 入力フォームをDB登録用のEntityに変換
    bookService.update(book);
    return "redirect:/CompleteUpdateBook";
}

// 詰め替えメソッド
public static Book toEntity(BookForm form) {
    Book book = new Book();
    book.setId(form.getId());
    book.setTitle(form.getTitle());
    book.setAuthor(form.getAuthor());
    book.setGenreId(form.getGenreId());
    book.setIsbn(form.getIsbn());
    return book;
}

Service
updateByPrimaryKeySelectiveメソッドを使うことで、bookオブジェクトに格納されたプライマリキーに対応するレコードの、非nullフィールドを対象としてUPDATEされます。

public void update(Book book) {
    // MyBatis Generator により生成された Mapper の updateByPrimaryKeySelective を使用。
    // 主キーに対応するレコードのうち、非nullフィールドのみを対象に更新。
    bookMapper.updateByPrimaryKeySelective(book);
}

<補足>
※プライマリキー以外の条件を使った更新も可能です。こちらは後ほど追記予定です。

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?