JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■JSONぶらり旅 json型DBを使ってDBから検索したデータでグラフを表示するサンプル
最近のデータベースは、json型のカラムをサポートするDBが増えてきました。
業務として使用したことがないので、あまり詳しくは知りませんが、
少なくとも、PostgreSQLはjson型をサポートしています。
PostgreSQL9.4以降のバージョンは、
jsonをバイナリとして管理するjsonb型という型もサポートするようになりました。

このぶらり旅では、せっかくJSONを取り扱っているので、試しにjsonb型のテーブルから
MyBatisを使ってデータを検索する方法をご紹介してみたいと思います。

大量なデータ検索とかのパフォーマンスは大丈夫なの?
なんていう疑問には残念ながら答えられません。
何しろ、実際の業務では実績がないのですから(笑)
将来的には、心配無用なパフォーマンスを十分期待できるようになる(?)とは思いますが
何しろ実績がないため、是とも非とも言い切れないのが現状です。
今のところは、あくまで勉強というスタンスで考えてください。

では、本題にはいります。
今回はDBが必要になりますが、本編「■SpringMVC の小径 8-1)DB環境の準備」
で作ったDBを利用します。(ちなみにバージョンは、PostgreSQL-9.5.1です)

■テーブルの作成
jsonb型カラムを持つテーブルを作成します。
create table tbl_graph (
  graph_data jsonb
);

■データの追加
上で作成したテーブルに、JSON型のデータを投入します。
前回と同じく、果物/肉類 に「花」を追加して3レコードのデータになります。

INSERT INTO tbl_graph (graph_data) VALUES ('
 {
  "category":0,
  "labels":["アボカド","キーウィ","オレンジ","リンゴ","モモ","マスカット","スイカ","キョホウ"],
  "datasets":[{
   "data":[10,30,50,70,90,65,40,15],
   "backgroundColor":["#648dc7","#00b1ae","#f7c35f","#eb714d","#ee71a1","#add673","#4abdf0","#b1629f"],
   "hoverBackgroundColor":["#648dc7","#00b1ae","#f7c35f","#eb714d","#ee71a1","#add673","#4abdf0","#b1629f"]
  }]
 }
');

INSERT INTO tbl_graph (graph_data) VALUES ('
 {
  "category":1,
  "labels":["豚肉","牛肉","魚介","鶏肉","鹿肉","馬肉","鯨肉","モツ"],
  "datasets":[{
   "data":[10,20,30,40,50,60,70,85],
   "backgroundColor":["#f7c35f","#648dc7","#ee71a1","#00b1ae","#b1629f","#eb714d","#4abdf0","#add673"],
   "hoverBackgroundColor":["#f7c35f","#648dc7","#ee71a1","#00b1ae","#b1629f","#eb714d","#4abdf0","#add673"]
  }]
 }
');

INSERT INTO tbl_graph (graph_data) VALUES ('
 {
  "category":2,
  "labels":["バラ","桜","チューリップ","百合","カーネーション","百日草","キキョウ","菊"],
  "datasets":[{
   "data":[50,90,10,40,70,30,20,60],
   "backgroundColor":["#648dc7","#00b1ae","#f7c35f","#eb714d","#ee71a1","#add673","#4abdf0","#b1629f"],
   "hoverBackgroundColor":["#648dc7","#00b1ae","#f7c35f","#eb714d","#ee71a1","#add673","#4abdf0","#b1629f"]
  }]
 }
');
以上でDBの準備は完了です。
試しに、DBのコマンドでデータを見てみましょう。
データが長ったらしいので「labels」のみ抽出、category降順でselectしてみます。

#select graph_data->>'labels' from tbl_graph order by graph_data->>'category' desc;

?column?
--------------------------------------------------------------------------------------------
["バラ", "桜", "チューリップ", "百合", "カーネーション", "百日草", "キキョウ", "菊"]
["豚肉", "牛肉", "魚介", "鶏肉", "鹿肉", "馬肉", "鯨肉", "モツ"]
["アボカド", "キーウィ", "オレンジ", "リンゴ", "モモ", "マスカット", "スイカ", "キョホウ"]
(3 rows)

大丈夫なようです。
プログラムの構造は、基本的に前回と同じですが、
前回のクラスをいじりたくないので
必要なものだけ新しく追加してあります。赤字の部分が今回追加したものです。
プログラム設計書
それでは、さっそく動作確認してみましょう。