changeset 36:215d5ce839b7

add compareDatabase
author tatsuki
date Thu, 01 Dec 2016 17:49:11 +0900
parents 6afc5049f8b6
children eea008c85b3b
files compareDatabase.tex main.tex
diffstat 2 files changed, 65 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compareDatabase.tex	Thu Dec 01 17:49:11 2016 +0900
@@ -0,0 +1,63 @@
+\section{OR-MapperとJungleの検索の比較}
+本章ではJungleとOR-Mapperの検索方法の比較を行う。
+
+検索には、人間関係を表した木構造データを用いる。
+MySqlでは、表\ref{User}の構造を持つテーブルuserを用いて木構造を表現する。
+
+
+\begin{table}[htb]
+\begin{center}
+\caption{User table}
+\begin{tabular}{|l|l|l|l|l|}        \hline
+id & name & age & type &parrent \\ \hline
+\end{tabular}
+\label{User}
+\end{center}
+\end{table}
+
+テーブルuserのカラムの説明を表\ref{UserTableColumn}11に記す。
+
+\begin{table}[htb]
+\begin{center}
+\caption{User tableのColumn}
+\begin{tabular}{|l|l|}        \hline
+id   & ユーザーのID \\ \hline
+name & 名前  \\ \hline
+age  &年齢  \\ \hline
+type &ユーザのタイプ(Teacher or Student) \\ \hline
+parrent & 自身の親のID  \\ \hline
+\end{tabular}
+\label{UserTableColumn}
+\end{center}
+\end{table}
+
+このテーブルuserに対して、名前が{\tt kono} タイプが{\tt Teacher}のユーザー以下のノードを全て取得したい。
+木構造の深さがわかっている場合、以下のコードのように、副問合せを複数回使用することで一回のSQLで取得可能である。
+select * from user where parent in (select id from user where parent = (select id from user where name = "kono" AND type = "Teacher")) union select * from user where parent = (select id from user where name = "kono" AND type = "Teacher") union select * from user where  name = "kono" AND type = "Teacher";
+
+しかし、深さが変わると上記のSQLは使用できないうえ、SQL文が長くわかりづらくなる。
+なので、特定のユーザー以下のノードを全て取得する場合は、プログラム内で再帰的に複数回SQLを発行する必要がある。
+
+しかしJungleでは以下の一回の検索で全てのノードを取得することが可能である。
+以下にJungleでの検索コードを記述する。
+
+\begin{lstlisting}[frame=lrbt,label=index,numbers=left]
+tree = jungle.getTreeByName("user");
+InterfaceTraverser traverser = tree.getTraverser(true);
+Iterator<TreeNode> iterator = traverser.find((TreeNode node) -> {
+  String value = node.getAttributes().getString("Name");
+  if (value == null) return false;
+  return value.equals("Kono");
+},"Type", "Teacher");
+
+while (iterator.hasNext()) {
+  TreeNode node = iterator.next();
+  AllNodeIterator nodeIterator = new AllNodeIterator(node);
+  while (nodeIterator.hasNext()) {
+    System.out.println(nodeIterator.next().getAttributes().getString("Name"));
+  }
+}
+\end{lstlisting}
+
+
+
--- a/main.tex	Thu Dec 01 16:53:51 2016 +0900
+++ b/main.tex	Thu Dec 01 17:49:11 2016 +0900
@@ -69,6 +69,8 @@
 %まとめ
 \input{summary.tex}
 
+
+\input{compareDatabase.tex}
 %\begin{acknowledgment}
 %みんなめっちゃありがと
 %\end{acknowledgment}