Java

【検証】MyBatis GeneratorにVIEW(ビュー)を食わせてみる

2020年12月19日

はじめに

こんにちは、SANACHANです。
今回は、「【解説】MyBatis Generatorを使いコードを自動生成する方法」の続きです。

 

データベースには「仮想テーブル」と呼ばれる「VIEW(ビュー)」という概念があります。
MyBatis Generator は VIEW に対してどのようなDAO/DTOのコードを生成するのでしょうか。
実際に検証しながら、一緒に見ていきましょう。

こんな方におすすめ

  • MyBatis Generator は VIEW に対応しているのか知りたい
  • MyBatis Generator が VIEW に対してどのような Entity クラスを生成するのか知りたい

 

語句説明

仮想テーブル「VIEW」とは?

Wikipediaには、以下のように記載されています。

関係データベースのデータベース言語SQL におけるビュー(英: view)とは、1つ以上の表(または他のビュー)から任意のデータを選択し、それらをカスタマイズして表したものである。

SANACHAN
SANACHAN
複数テーブルから必要なCOLUMNを集め、任意のテーブル(仮想)を作成すること。

 

VIEWを使うメリット

  • SQL文をシンプルにできます
  • 見せたくないデータを非公開にできます
SANACHAN
SANACHAN
少しだけVIEWを使うメリットを紹介しておきます。

 

SQL文をシンプルにできる

VIEW を作成するSQL文は、以下のフォーマットです。

SANACHAN
SANACHAN
VIEWは、従来のSELECT文に「名前」を付けるイメージです

ポイント

つまり、複数のテーブルをJOIN句などで繋げていたSQL文を、あたかも1つのテーブル(VIEW)にアクセスするかのように、SQL文を書き換えることができます。

 

見せたくないデータを非公開にできる

各テーブルのデータに個人情報や機密情報など、参照を限定したい部分がある場合があります。

このような場合、公開しても問題無い情報だけを取り出せるようにVIEWを作成し、
隠蔽したい部分を非公開にすることができます。

テーブルとVIEWにそれぞれアクセス制御をかけることによって、参照できるユーザを限定できます。

VIEWのセキュリティ

VIEWでセキュリティーを保つ(出典:ITの学び

 

 

本検証で使用した開発環境

eclipse + SpringBoot + H2 Database を使用しています。

環境の構築、および各パッケージのバージョンなどは、以下の記事を参照ください。

自動生成
参考【解説】MyBatis Generatorを使いコードを自動生成する方法

JavaでDBを利用する開発ではO/Rマッパーを利用することがあり、DAO、DTO、Mapping定義ファイルなどの実装が必要になります。正直めんどう。今回はこれら必要なクラスを自動生成してくれるMyBatis Generatorを紹介します。

続きを見る

 

VIEWを作成するDDL

今回は複数のテーブルを連結させたVIEWを作成するため、以下のDDLを準備します。

VIEW作成のDDL
SANACHAN
SANACHAN
環境準備で作成した「V1____create_schema.sql」を編集します

 

テーブルとVIEWをDBに作成

前回「【解説】MyBatis Generatorを使いコードを自動生成する方法」で作成したJavaアプリケーション「MybatisDemoApplication」をランナータブから実行し、FlywayにDDLをDBに適用してもらいます。

VIEW-DDLの適応結果
SANACHAN
SANACHAN
赤枠の「Successfully applied 1 migration to schema "PUBLIC"」が出てれば成功です。

注意

もしエラーが出た場合は、準備で作成したテーブルが残っている可能性があります。
C:\Work\EclipseWork\mybatis-demo\h2db\sanachan.db.mv.db」を削除し、再実行しよう。

スポンサーリンク

MyBatis Generator Config の作成

src/main/resources」配下にある「generationConfig.xml」ファイルを作成・編集します。

ポイント

MyBatis Generator から見れば、VIEW もテーブルと同じ扱いです。
tableName」のプロパティに作成した VIEW の名称をセットします。



スポンサーリンク

MyBatis Generatorを実行

前回「【解説】MyBatis Generatorを使いコードを自動生成する方法」で作成した「mybatis-generator」をランナータブから実行し、DAOとDTOのソースコード(EntiryクラスとMappingファイル)を自動生成します。

MyBatisGenerator実行結果

 

生成されるファイル一覧

 src/main/
java/entity.domain
|- Student.java
|- StudentExample.java
|- Test.java
|- TestExample.java
|- TestResult.java
|- TestResultExample.java
|- Viewtestresult.java
|- ViewtestresultExample.java
java/mybatis
|- StudentMapper.java
|- TestMapper.java
|- TestresultMapper.java
|- ViewtestresultMapper.java
resources/com.example.demo.mybatis
|- StudentMapper.xml
|- TestMapper.xml
|- TestresultMapper.xml
|- ViewtestresultMapper.xml

スポンサーリンク

VIEW用に自動生成されたファイルの中身(コメント除く)

DTO(Viewtestresult.java)

SANACHAN
SANACHAN
テーブル用に作成されるDTOと同じ内容のものが作成されました。

 

DAO(ViewtestresultMapper.java、ViewtestresultExample.java)

スポンサーリンク



SANACHAN
SANACHAN
DAOもテーブルと同等の機能を備えたインターフェイス、クラスが生成されましたね。

スポンサーリンク

結論

今回の検証から、以下のことが分かりました。

  • MyBatis Generator は、VIEW(仮想テーブル)にも対応している
  • 自動生成されるDAO/DTOのソースコードは、テーブルを入力したときと同等のもの

 

ポイント

MyBatis Generator は、VIEW も普通のテーブルとみなして扱っている。

SANACHAN
SANACHAN
VIEWを使ってデータにアクセスする際のSQL文と同じですね。

 

以上、「【検証】MyBatis GeneratorにVIEW(ビュー)を食わせてみる」でした。

 

こちらの記事もよく読まれています

  • この記事を書いた人
  • 最新記事
SANACHAN

SANACHAN

「生涯一エンジニア」を掲げ、大手グローバル企業でSE/PGとして8年勤め、キャリアアップ転職した現役のエンジニアです。世にあるメジャーな全プログラム言語(コボル除く)を自由に扱えます。一児の父。自分のため、家族のため、日々勉強してます。システムエンジニア、プログラミングに関する情報を蓄積している雑記帳です。

-Java
-, ,