■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) 大丈夫なようです。 |
プログラムの構造は、基本的に前回と同じですが、 前回のクラスをいじりたくないので 必要なものだけ新しく追加してあります。赤字の部分が今回追加したものです。 |
![]() |
それでは、さっそく動作確認してみましょう。 |
ぶらり旅立ち ![]() |
2)グラフ描画(DB検索) |
![]() |